0

Perlで複数の条件のコードをいくつか持っています

if (/abc/ && !/def/ && !/ghi/ && jkl) {

#### do something
}

すべての条件がすべての行で一度に評価されますか?

ネストされたifsを使用して条件に優先順位を付けることができます

if (/abc/){

  if (!/def/){

  ....so on

}
4

2 に答える 2

2

&&短絡。必要な場合にのみ RHS オペランドを評価します。LHS オペランドが何か false を返す場合、&&その値になります。

例えば、

use feature qw( say );
sub f1 { say "1"; 1 }
sub f2 { say "2"; 0 }
sub f3 { say "3"; 0 }
sub f4 { say "4"; 0 }
1 if f1() && f2() && f3() && f4();

出力:

1
2

したがって、次の 2 行は基本的に同じです。

if (/abc/) { if (!/def/) { ... } }

if (/abc/ && !/def/) { ... }

実際、演算子にifコンパイルされるandため、上記は非常に似ています

(/abc/ and !/def/) and do { ... };

(/abc/ && !/def/) and do { ... };
于 2013-07-10T23:35:22.117 に答える
1

いいえ。

と言ったら、こう考えてみてください。

"is the moon bigger than the sun?"
AND  "is the pacific bigger than the mediterraan?"
AND  "is russia bigger than england?"
AND  ... many more AND ....

最初の質問以外の答えを見つける必要がなく、すぐに「いいえ」と答えることができます。「短絡」といいます

したがって、あなたの場合、入力行が一致しない限り

/abc/ && !/def/ && !/ghi/

/jkl/ に一致するかどうかを評価する必要はありません。

于 2013-07-11T04:22:40.960 に答える