The quantifier actually makes it match every group; however, it only stores the last match in $1, and thus that's what you see in your return. See Extracting matches
If you want to extract an arbitrary number of digits sandwiched between decimal points, you can grab them all, and then split the result.
split /(?<=\.)/, $1;
[i]n list context, //g returns a list of matched groupings, or if there are no groupings, a list of matches to the whole regexp
(see Global matching
) so you could try
my @res = /(?<=\.)\d+\./g;
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.