2009-07-16 4 views
29

Cスタイルの演算子&&,||、...とそのPerl人間が判読可能なバージョン "and"、 "or"、...の違いは何ですか?"||"の違いは何ですか? Perlでは "or"?

インターネットコードは、それらの両方を使用しているようです:

open (FILE, $file) or die("cannot open $file"); 
open (FILE, $file) || die("cannot open $file"); 
+9

良い順位チャート用 'はperldoc perlop'を参照してください、そしてより多くの例については、「論理的か」の項を参照してください。またhttp://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity – Telemachus

+6

レキシカルファイルハンドルと3つの引数を持つopenの形式を使用します。システムが返すエラーを、次の引数に含めます:** '$ my_file_h、 '<'、$ fileまたはdieをオープンします: '$ file'をオープンできません:$!"; '** –

+1

または" autodieを使用 " – jrockway

答えて

33
Perlのドキュメントから

..

  • OR

これはリスト演算子です。リスト演算子の右辺では、優先順位が非常に低く、コンマで区切られたすべての式を制御します。優先順位の低い演算子は、論理演算子 "and"、 "or"、 "not"のみであり、余分な括弧を必要とせずにリスト演算子への呼び出しを評価するために使用できます。 論理型、または定義型、または排他的または

バイナリ "または"は、2つの周囲の式の論理的論理和を返します。 ||と同じです非常に低い優先順位を除いて。すなわち、右側の式は左側の式がfalseの場合にのみ評価されます:これは、制御フローのために有用

print FH $data  or die "Can't write to FH: $!"; 

なります短絡があることを意味します。その優先順位のために、あなたはおそらく制御フローのためだけに割り当てのためにこれを使用することを避けるべきです。しかし

$a = $b or $c;  # bug: this is wrong 
($a = $b) or $c;  # really means this 
$a = $b || $c;  # better written this way 

、それはリストコンテキストの割り当てだとあなたが使用しようとしているとき、「||」制御フローの場合は、割り当てが優先されるように「または」が必要になることがあります。

@info = stat($file) || die;  # oops, scalar sense of stat! 
@info = stat($file) or die;  # better, now @info gets its due 

また、括弧を使用することもできます。

  • ||

任意リスト演算子(等プリント())、または任意の単項演算子(CHDIR()など)次のトークンとして左括弧が続く場合、括弧内のオペレータと引数を取られます通常の関数呼び出しと同じように、優先順位が最も高くなるようにします。名前の単項演算子は||より優先されるので、例えば:

chdir $foo || die; # (chdir $foo) || die 
chdir($foo) || die; # (chdir $foo) || die 
chdir ($foo) || die; # (chdir $foo) || die 
chdir +($foo) || die; # (chdir $foo) || die 
+0

Dave Hintonよりも完成度が高いので回答は –

33

唯一の違いは、彼らの優先順位です。

open FILE, $file or die("cannot open $file"); # this works 
open FILE, $file || die("cannot open $file"); # this doesn't work 
open FILE, ($file || die("cannot open $file")); # why it doesn't work 
7

"& &" と "||"オペレータは、 "and"、 "or"の対応よりも優先順位が高くなります。

20

!&&||、および^は、彼らが表現を構築するのに有用であるように、高い優先順位を持ちます。 not,and,orおよびxorは、それらが基本的に異なる表現であるフロー制御のために有用であるように、低い優先順位を有する。

+1

です。私はこの回答が受け入れられた回答よりもずっと短く、必要な答えを提供します。 – Rafid

関連する問題