我试图从 Perl 程序中的文件中匹配一些数据模式。由于匹配可能超过多行,因此我将行分隔符设置为未定义。
$/ = undef ;
现在,由于匹配可以跨越多行并且不止一行,我使用 smgi 修饰符。
if ( $msgText =~ /$msgTypeExpr/smgi )
现在,我遇到的问题是上面的变量 $msgText 被修改了,尽管我没有替换它。
以下是相关代码:
open (HANDLE1,"$file") || die "cannot open file \n";
$/ = undef ;
while ( my $msgText = <HANDLE1> )
{
my $msgTypeExpr = "<city\\W+";
print "Attempt 1:\n";
if ( $msgText =~ /$msgTypeExpr/smgi )
{
print "matched\n";
}
else
{
print " not matched \n";
}
print "Attempt 2:\n";
if ( $msgText =~ /$msgTypeExpr/smgi )
{
print "matched\n";
}
else
{
print " not matched \n";
}
}
测试输入文件如下所示:
<city
name="abc">
</city>
人们会期望该模式匹配两次,但它只匹配第一次而不是第二次。
我已经暂时解决了这个问题,在匹配之前先分配给一个临时变量,然后使用该临时变量进行匹配。
my $tmpMsgText = $msgText ;
这是我第一次在这个论坛上发布问题,所以请原谅我可能犯的任何礼仪错误,也请您指出它们,以便我以后不再重复。