7
我在匹配模式时遇到了一个奇怪的问题。使用数组时匹配Perl模式
考虑下面
#!/usr/bin/perl -w
use strict;
my @Array = ("Hello|World","Good|Day");
function();
function();
function();
sub function
{
foreach my $pattern (@Array)
{
$pattern =~ /(\w+)\|(\w+)/g;
print $1."\n";
}
print "\n";
}
__END__
Perl代码我期望的输出应该
Hello Good Hello Good Hello Good
但我得到的是
Hello Good Use of uninitialized value $1 in concatenation (.) or string at D:\perlfiles\problem.pl li ne 28. Use of uninitialized value $1 in concatenation (.) or string at D:\perlfiles\problem.pl li ne 28. Hello Good
我观察到的是该模式交替。
有人可以解释我这个代码有什么问题。
为了解决这个问题,我改变了功能子程序是这样的:
sub function
{
my $string;
foreach my $pattern (@Array)
{
$string .= $pattern."\n";
}
while ($string =~ m/(\w+)\|(\w+)/g)
{
print $1."\n";
}
print "\n";
}
现在我得到的输出如预期。
我删除了/ g修饰符。它按预期工作。 – vels 2012-03-13 04:54:23