У меня странная проблема с сопоставлением с шаблоном.
Рассмотрим приведенный ниже код 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__
Ожидаемый вывод должен быть
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";
}
Теперь я получаю вывод, как и ожидалось.