O ile wiem, w perlu globalna flaga "/ g" oznacza, że wyszukiwanie zastąpi/zwróci wszystkie dopasowania w ciągu znaków. Ale nie jestem w stanie zrozumieć sposób, w jaki reaguje na zmienne globalne, dopasowując, może ktoś wyjaśnić, dlaczego istnieje różnica między produkcją tych dwóch przykładowych programów:Pomóż zrozumieć flagę globalną w perlu
Wersja 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 ";
}
}
wyjście: dopasowane> 3,2 dopasowane> 3,2
Wersja 2: (z globalnej flagi)
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 ";
}
}
wyjściowa: dopasowane> 3,2
Jak widać z wyjść z globalnego flag dopasowanie występuje tylko raz. Czy ktoś może wyjaśnić to zachowanie.
Powinieneś rzucić okiem na [perldoc perlretut] (http://perldoc.perl.org/perlretut.html#Using-regular-expressions- in-Perl) – TLP
Czego się spodziewasz? Chcesz, żeby pasował, dopóki nie pasuje? Czy nie oznacza to, że warunek "jeśli" zawsze byłby fałszywy. W skrócie, 'if (/.../ g)' nie ma sensu. – ikegami