You don't need to set $1 before the match. In fact, I think you can't.
$ perl -le '$1=undef;'
Modification of a read-only value attempted at -e line 1.
$1 will be set to undef after a match with no parentheses.
"1234"=~/(\d)/;
print "$1\n";
"1234"=~/34/;
print "$1\n";
print "undef\n" if ! defined $1;
Prints:
1
undef
This doesn't work when a regex had capturing parentheses that didn't match. Just like the "no parentheses" case above, this also prints "undef":
"1234"=~/(x)?34/;
print "undef" if ! defined $1;
|