Насколько я знаю, в perl global флаг '/ g' означает, что поиск заменит / вернет все совпадения по всей строке. Но я не могу понять, как он реагирует на глобальные переменные при сопоставлении, может кто-нибудь объяснить, почему существует разница между выходными данными этих двух примеров программ:
Версия 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 ";
}
}
Выход:
соответствует> 3,2
соответствует> 3,2
Версия 2: (с глобальным флагом)
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 ";
}
}
Выход:
соответствует> 3,2
Как видно из выходных данных, при глобальном сопоставлении флагов происходит только один раз. Может кто-нибудь объяснить это поведение.