代入と置換を同時に

back
$str1 = "foobar";
($str2 = $str1) =~ s/foo/hoge/g;

print "$str1\n";
print "$str2\n";

$str1 は foobar
$str2 は hogebar

まず、$str2 = $str1 が評価され、$str1 の内容が $str2 へコピーされる。
でもって、その値がパターン置換評価される。

逆に以下のようにすると

$str2 = ($str1 =~ s/foo/hoge/g);

まず $str1 のパターン置換が行われ、その結果の「パターン置換が行われた回数」が
$str2 に代入される。
上記の例では 1。
ただし、1回もマッチしなかった場合は 0 ではなく偽(空文字)になる。(undefではない)

back