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