Regex 使用数组时的Perl模式匹配

Regex 使用数组时的Perl模式匹配,regex,perl,Regex,Perl,我在匹配模式时遇到了一个奇怪的问题 考虑下面的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"; }

我在匹配模式时遇到了一个奇怪的问题

考虑下面的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__
我期望的输出应该是



现在我得到了预期的输出

正在工作的是全局
/g
修改器。它会记住最后一次模式匹配的位置。当它到达字符串的末尾时,它将重新开始

删除
/g
修饰符,它将按照您的预期工作

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";
}