続・論理和演算子『||』と『or』の違い
以下は、前回書いた『論理和演算子『||』と『or』の違い』です。
演算子とor演算子は、共に論理和演算子なのですが、演算子の優先順位が違います。 ちなみに、論理和演算子とは、左側を評価して真であれば、右側を評価せずに結果を返します。
以下のように||演算子とor演算子の優先順位の間には『=』や『,』等があるわけです。http://d.hatena.ne.jp/chaichanPaPa/20090130/1233324342
- (高い)
- ||
- = += -= *= などの代入演算子
- , =>
- or xor
- (低い)
しかし、しばらく経つと、またわからなくなったりするのです。
ちなみに、Perlでの真偽は以下のようになっています。
Perlでは、""と"0"は偽、これ以外のすべての文字列は真である。
http://chaichan.lolipop.jp/perlnote/perlnote2007-06-12.htm
数値は文字列に変換されて評価される。したがって、0が偽で、0以外は真である。
で、以下の場合、$aaaは『123』と表示され、$bbbは何も表示されないのです。
#!/usr/bin/perl use strict; use warnings; my $aaa = ''; my $bbb = ''; my $ccc = ''; my $ddd = '123'; $aaa = $ccc || $ddd; print '$aaa = ', $aaa, "\n"; $bbb = $ccc or $ddd; print '$bbb = ', $bbb, "\n";
$aaaは、『$ccc || $ddd;』が優先順位の関係で先に評価され、$cccが空文字列で偽であるため右側の$dddを評価し、内容が'123'なのでこれを$aaaに代入します。
$bbbは、『$bbb = $ccc』が優先順位の関係で先に評価され、$bbbに空文字列が代入され、そしてそれが偽であるため$dddを評価しますが、すでに代入を評価しているので、なにも起こらないのです(たぶん)。