この perl 式 "" は何ですか?
$DEBUG>=3 && DEBUG("OK=$ok");
私を混乱させているのは、主にブール演算「&&」です。誰でも説明できますか?ありがとう。
この perl 式 "" は何ですか?
$DEBUG>=3 && DEBUG("OK=$ok");
私を混乱させているのは、主にブール演算「&&」です。誰でも説明できますか?ありがとう。
以下と同じです。
if( $DEBUG >= 3 ) {
DEBUG("OK=$ok");
}
また
DEBUG("OK=$ok") if $DEBUG >= 3;
私は個人的にこれを好みます(私にとっては読みやすいです)
説明:
Sentence1 && Sentence2
Sentence2
Sentence1
が true の場合にのみ実行されます。&& 演算子は論理積であるため、最初の文が false の場合、操作全体が false になります (2 番目の文を評価する必要はありません)。
perlop の引用:
C スタイルの論理積
バイナリ「&&」は、短絡論理積演算を実行します。つまり、左のオペランドが false の場合、右のオペランドは評価されません。スカラーまたはリスト コンテキストは、評価される場合、右側のオペランドまで伝播します。
$DEBUG は 3 以上である必要があり、return
からの値も同様であるsub DEBUG
必要があります。つまり、そうではないtrue
True
サブを持つブール部分も同様に実行されます。そのため、式がif
句内にある場合、return
値はその式の一部になります。例えば。
sub test {
return 1;
}
if ( $abc >2 && test() ) {
...
}
はand演算子です&&
。ただし、 のように、Perl はロジック ショートカットを使用します。左辺が false の場合、ステートメント全体が false であることがわかるため、右辺をテストする必要はありません。ただし、左辺が true の場合は、ステートメント全体が true であることを確認するために、右側をテストする必要があります。C
したがって、$DEBUG >= 3
が true の場合、右側$OK = "ok"
が実行されます。以下と同じです:
if ( $DEBUG >= 3 ) {
$OK = "ok";
}
そして、私がしたように長い道のりを書き出す方が良いと私は主張します1。&&
論理ステートメントで何をするかを知っていたとしても、脳が何をしているかを理解するのに数ミリ秒の処理が必要$DEBUG>=3 && $OK="ok";
です。それでも、長い道のりを書き出すよりも実行するのはおそらく速くありません。
将来どこかで、貧弱なシステム アプリケーション プログラマー (別名 sap) が参加してコードを保守する必要があります。コードがぎっしりと書かれた不可解なステートメントで行き詰まっている場合、それを維持するのは困難です。
1そして書くことさえ考えないでください$OK = "ok" if $DEBUG >= 3;
。これは、後置の if ステートメントには当てはまりません。