Perlで複数の条件のコードをいくつか持っています
if (/abc/ && !/def/ && !/ghi/ && jkl) {
#### do something
}
すべての条件がすべての行で一度に評価されますか?
ネストされたif
sを使用して条件に優先順位を付けることができます
if (/abc/){
if (!/def/){
....so on
}
Perlで複数の条件のコードをいくつか持っています
if (/abc/ && !/def/ && !/ghi/ && jkl) {
#### do something
}
すべての条件がすべての行で一度に評価されますか?
ネストされたif
sを使用して条件に優先順位を付けることができます
if (/abc/){
if (!/def/){
....so on
}
&&
短絡。必要な場合にのみ 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 { ... };
いいえ。
と言ったら、こう考えてみてください。
"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/ に一致するかどうかを評価する必要はありません。