Tengo un problema extraño al hacer coincidir un patrón.Coincidencia de patrones Perl al utilizar matrices
Considere el código Perl debajo
#!/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__
La salida espero que debería ser
Hello Good Hello Good Hello Good
Pero lo que consigo es
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
Lo que observé fue que el patrón coincide alternativamente.
¿Alguien me puede explicar cuál es el problema con respecto a este código?
Para solucionar este cambié la subrutina función a algo como esto:
sub function
{
my $string;
foreach my $pattern (@Array)
{
$string .= $pattern."\n";
}
while ($string =~ m/(\w+)\|(\w+)/g)
{
print $1."\n";
}
print "\n";
}
ahora consigo la salida como se esperaba.
Eliminé/g modificador. Funcionó como se esperaba. – vels