my $text = 'abcde'; # (1) $text =~ m/(bc)/; warn $1; # -> bc # (2) $text =~ m/(ce)/; my $tmp = $1; warn $tmp; # -> bc # (3) if ( $tmp ) { # do something for $tmp }
(1)では、正規表現がマッチするので$1には"bc"が入ります。
(2)では、正規表現がマッチしません。
マッチしない場合は、$1には空が入るのかなぁと思ったのですが違いました。
$1には"bc"が入ったままとなります。
なので、(3)のように、(2)がマッチした場合に$tmpに対してなにか処理する、みたいなものだとうまく動きません。
そうしたい場合は、以下のようにする感じ。
my $tmp; if ( $text =~ /(ce)/ ) { $tmp = $1; }