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

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

I'm trying to use a code evaluation assertion in a regex inside of a subroutine, and I'm seeing this strange behavior where it only executes the code the first time that I call the subroutine. Here is the simplest example I could come up with:
sub regex { my $in = shift; my $ret = ''; # Assign something to $ret in a code assertion $in =~ m/^(a)(?{$ret=1})/; return $ret; } while(<DATA>) { print regex($_) . "."; } __DATA__ a b a abcd bcda
The output that I get is "1...." when I would expect to get "1.1.1.1.1." As I understand it, the value 1 should get assigned to $ret every time through the regex, regardless of whether ^(a) matched. Can anyone explain this? I'm rather confused.