Por lo que yo sé en Perl '/ g' indicador global significa que la búsqueda reemplazará/devolver todos los partidos a lo largo de la cadena. Pero no soy capaz de entender la forma en que reacciona a las variables globales mientras que empareja, puede explicar alguien el por qué hay diferencia entre la producción de estos dos programas de ejemplo:ayuda para entender indicador global en Perl
Versión 1:
my $text = 'This is sample float value 3.2 ';
getFloat();
getFloat();
sub getFloat(){
if ($text =~ /([0-9]+?)(.?)([0-9]+?)/is){
print "matched> $1$2$3 ";
}
}
salida: igualada> 3.2 emparejados> 3,2
Versión 2: (con indicador global)
my $text = 'This is sample float value 3.2 ';
getFloat();
getFloat();
sub getFloat(){
if ($text =~ /([0-9]+?)(.?)([0-9]+?)/gis){
print "matched> $1$2$3 ";
}
}
Salida: emparejado> 3,2
Como se ve en las salidas, la coincidencia indicador global se produce sólo una vez. ¿Alguien puede explicar este comportamiento?
Debería echarle un vistazo a [perldoc perlretut] (http://perldoc.perl.org/perlretut.html#Using-regular-expressions- en-Perl) – TLP
¿Qué estás esperando? ¿Quieres que siga apareciendo hasta que no coincida? ¿No significaría eso que la condición 'si' siempre sería falsa? En resumen, 'if (/.../g)' no tiene sentido. – ikegami