二つの変数を相互に入れる
・仕様
- $aaa と $bbb という変数があり、中身はあるかもしれないし、ないかもしれない。
- $aaa に値がないときには $bbb を $aaa に入れる。
- $bbb に値がないときには $aaa を $bbb に入れる。
- $aaa, $bbb ともに中身がない、というのは存在しない
こう考えた。
$aaa ||= $bbb ||= $aaa;
やってみた。
$aaa = 'test'; $bbb; $aaa ||= $bbb ||= $aaa; print "\$aaa -> $aaa\n"; print "\$bbb -> $bbb\n";
$aaa -> test $bbb ->
だめだった。
B::Deparseを使ってみる。
$ perl -MO=Deparse $aaa = 'test'; $bbb; $aaa ||= $bbb ||= $aaa;
$aaa = 'test'; $bbb; $aaa ||= ($bbb ||= $aaa); - syntax OK
なるほど。
いつも「=」があると右から左に見るように慣れていたけれど、
ここでは先に左の「$aaa ||= 」が評価されている、ということか。
思いついたときは、おおこれスマートじゃね、と少し喜んだのだけれど。
結局以下のようにして対応した。
$aaa ||= $bbb; $bbb ||= $aaa;
シンプルイズベスト。