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:
- In scalar context m//g doesn't return size of the list it would give back when called in list context,
- The \G anchor is useless - perlre states, that it should be used only at the beginning of pattern,
- 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 :>
Back to
Seekers of Perl Wisdom