http://www.perlmonks.org?node_id=305715

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

During my first steps in perlgolf I've encountered a strange m//g behaviour (perl 5.8.1).

When I run following code:

#!/usr/bin/perl -l $_="123"; @a=/./g; print "#1: ", /./g; $_="123"; $a=/./g; print "#2: ", /./g; $_="123"; /./g; print "#3: ", /./g; $_="123"; /./g; print "#4: ", /\G./g; $_="123"; /./g; undef pos; print "#5: ", /./g; $_="123"; /./g; undef pos; print "#6: ", /\G./g; $_="123"; /./g; pos = 2; print "#7: ", /./g; $_="123"; /./g; pos = 2; print "#8: ", /\G./g;

I get this output:

#1: 123 #2: 23 #3: 23 #4: 23 #5: 123 #6: 123 #7: 3 #8: 3

This test shows that:

  1. In scalar context m//g doesn't return size of the list it would give back when called in list context,
  2. The \G anchor is useless - perlre states, that it should be used only at the beginning of pattern,
  3. and most important - m//g in scalar context doesn't reset pos (matches only once).

I ask you if it's proper behaviour / undocumented feature / bug? Or maybe I have missed something?

PS. My username is kokr but somehow email with my passwd can't find it's way to my mailbox :>