【发布时间】:2012-03-29 12:11:05
【问题描述】:
我在匹配模式时遇到了一个奇怪的问题。
考虑下面的 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__
我期望的输出应该是
你好 好的 你好 好的 你好 好的
但我得到的是
你好 好的 在 D:\perlfiles\problem.pl 的连接 (.) 或字符串中使用未初始化的值 $1 28. 在 D:\perlfiles\problem.pl 的连接 (.) 或字符串中使用未初始化的值 $1 28. 你好 好的我观察到的是模式交替匹配。
谁能解释一下这段代码有什么问题。
为了解决这个问题,我将函数子例程更改为如下内容:
sub function
{
my $string;
foreach my $pattern (@Array)
{
$string .= $pattern."\n";
}
while ($string =~ m/(\w+)\|(\w+)/g)
{
print $1."\n";
}
print "\n";
}
现在我得到了预期的输出。
【问题讨论】: