0

この perl 式 "" は何ですか?

$DEBUG>=3 && DEBUG("OK=$ok");

私を混乱させているのは、主にブール演算「&&」です。誰でも説明できますか?ありがとう。

4

4 に答える 4

5

以下と同じです。

if( $DEBUG >= 3 ) {
   DEBUG("OK=$ok");
}

また

DEBUG("OK=$ok") if $DEBUG >= 3;

私は個人的にこれを好みます(私にとっては読みやすいです)

説明:

Sentence1 && Sentence2

Sentence2Sentence1が true の場合にのみ実行されます。&& 演算子は論理積であるため、最初の文が false の場合、操作全体が false になります (2 番目の文を評価する必要はありません)。

于 2013-07-04T09:52:49.137 に答える
1

perlop の引用:

C スタイルの論理積

バイナリ「&&」は、短絡論理積演算を実行します。つまり、左のオペランドが false の場合、右のオペランドは評価されません。スカラーまたはリスト コンテキストは、評価される場合、右側のオペランドまで伝播します。

于 2013-07-04T09:55:28.493 に答える
1

$DEBUG は 3 以上である必要があり、returnからの値も同様であるsub DEBUG必要があります。つまり、そうではないtrueTrue

  • undef
  • 0
  • ""
  • 「0」
  • ブール値への変換をオーバーロードして false を返す祝福されたオブジェクト
  • 空の配列と空のハッシュ

サブを持つブール部分も同様に実行されます。そのため、式がif句内にある場合、return値はその式の一部になります。例えば。

sub test {
    return 1;
}

if ( $abc >2 && test() ) {
    ...
}
于 2013-07-04T09:52:35.450 に答える
0

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 ステートメントには当てはまりません。

于 2013-07-04T11:44:08.883 に答える