estoy aprendiendo Perl y notado una peculiaridad bastante peculiar - tratar de coincidir con una de varias condiciones de expresiones regulares en un rato resultados de bucle en bucle que pasa para el infinito:Perl: ¿Múltiples condiciones globales de expresiones regulares "o" separadas en el bloque conduce a un bucle infinito?
#!/usr/bin/perl
my $hivar = "this or that";
while ($hivar =~ m/this/ig || $hivar =~ m/that/ig) {
print "$&\n";
}
La salida de este programa es:
this
that
that
that
that
[...]
Me pregunto por qué es esto? ¿Hay alguna solución que son menos torpe que esto:
#!/usr/bin/perl
my $hivar = "this or that";
while ($hivar =~ m/this|that/ig) {
print "$&\n";
}
Ésta es una simplificación de un problema del mundo real que estoy encontrando, y mientras yo estoy interesado en esto en un punto de vista práctico, también me gustaría saber qué detrás de las escenas está desencadenando este comportamiento. Esta es una pregunta que no parece ser muy compatible con Google.
Gracias!
Tom
hobbes lo explicaron muy bien a continuación, pero también lo hacen Wall, Schwartz, et al .: http://perldoc.perl.org/perlretut.html#Global-matching – msw
Es posible que desee ver aquí para ver si el Regexp :: Ensamblar paquete puede ayudarlo: http://stackoverflow.com/questions/1478083/how-can-i-efficiently-match-many-different-regex-patterns-in-perl –