http://qs1969.pair.com?node_id=220154


in reply to pos()atively mysterious.

The problem here is that the matching is being performed against a quoted string rather than a named variable - From the documentation for pos:

pos SCALAR pos Returns the offset of where the last "m//g" search left off for the variable in question ($_ is used when the variable is not specified). May be modi- fied to change that offset. Such modification will also influence the "\G" zero-width assertion in regular expressions. See perlre and perlop.

If your code was modified thus, matching against a variable rather than a quoted string, it would execute without error:

my $var = 'the quick brown fox'; while( $var =~ m/(.)/g ) { print "Matched '$1' \@ pos:", pos($var), "\n"; }

 

perl -le 'print+unpack("N",pack("B32","00000000000000000000000111111001"))'