As far as I know in perl global ‘/g’ flag means that search will replace/return all the matches throughout the string. But I am not able to understand the way it reacts to global variables while matching, can somebody explain the why there is difference between output of these two sample programs:
Version 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 ";
}
}
Output:
matched> 3.2
matched> 3.2
Version 2:(with global flag)
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 ";
}
}
Output:
matched> 3.2
As seen from outputs, with global flag matching occurs only once. Can someone explain this behaviour.
With the
gmodifier, the string remembers the place of its last match, so you can request a match with agin a while loop and find all the matches.Without the
gyou start over each time and always find the first match.In your case, with the
g, you matched 3.2 the first time, but the second time you tried to match, there were no more matches.Without the
gyou can callgetFloat()a zillion times and you will always find the first match.