It's possible for either or both of pos or ${^MATCH} to be undefined after a match, which is easily demonstrated (Perl version 5.14):
>perl -wMstrict -le
"my @strs = (qw(123x foo ***), '');
;;
for my $s (@strs) {
$s =~ m{ \d+ }xmsgp;
printf qq{for '%s': pos == %s, \${^MATCH} eq '%s' \n}, $s,
pos($s) // 'undefined', ${^MATCH} // 'undefined',
;
}
"
for '123x': pos == 3, ${^MATCH} eq '123'
for 'foo': pos == undefined, ${^MATCH} eq 'undefined'
for '***': pos == undefined, ${^MATCH} eq 'undefined'
for '': pos == undefined, ${^MATCH} eq 'undefined'
Rather than Perl, I think the most likely explanation is that the data you are processing has changed.
Update: ... and the length of an undef is undefined.
|