&& と and の違い

今更の話ではあるんだけど、まとめ。

Perl では、
&& と and

と or

という同じ意味の演算子が用意されている。


and、or は使わない方がいい、&& と || を使いなさいと教える場合もあるかもしれない。違いは、
「代入と三項演算子より優先順位が高いか低いか」
と考えていい気がする。

and と or は代入と三項演算子より優先順位が低い

&& と || は逆に、高い。


and や or に関して、

print $out "hello\n" or die;

という構文はよく出てくるのだが、これの場合、

print $out "hello\n" || die;

と書いても結果が一緒なので、違いが分かりにくい。


違いが出てくるのは、以下のような場合だ。

my $a = 0 || 1 ## $a は 1
my $b = 0 or 1 ## $b は 0

$a、$b にはそれぞれ 1 と 0 が入る。|| は代入よりも優先順位が高いため、$a には、「0 || 1」の結果として、1 が入る。or は逆に代入よりも優先順位が低いため、代入が先に行われる。つまり、「$b = 0」 が先に行われ、その後で、or 1 が動く。

たまーにこれにひっかかるし、普段この演算子を使いたいケースというのは、|| と && でことたりる場合が普通なので、これを使っておいた方が無難だと思う今日この頃。