perlの演算子の優先度
まずは、以下の2つのコマンドを何も考えずにコンソールに入力してみてください。
perl -E 'say 10,000 or 56'
perl -E 'say 10,000 || 56'
さてどのような値が返ってくると思いますか?何だろう?10000かな?
[yashims85@yashims85:~]% perl -E 'say 10,000 or 56' 100
ファッ!?
これは、10,000が1つの数値ではなく、sayの2つの引数としてsay(10, 0)のように解釈されたためです。
( sayに複数の引数を渡すと、文字列として結合する。また000はint(0)で解釈される)
では、もう一つの方。。まぁ同じ結果だろう。
[yashims85@yashims85:~]% perl -E 'say 10,000 || 56' 1056
ファッ!!!?!?!?
これは、perlではorと||の結合優先度が異なるためです。そのためsay(10, (000 || 56))と解釈されました。
というわけで、まとめると今回の引掛けポイントは以下の2点です。
10,000は2つの数値だよ!orと||は優先度が全然違うよ!
こんなん普通に騙されるわーーー
orの扱いが特殊なんですね。というわけで、orでつなげるときは単項同士でつなげるか、()で優先度を明示したほうが良さそうですね。