我在Perl中有一些代码用于多个条件
if (/abc/ && !/def/ && !/ghi/ && jkl) {
#### do something
}
每条线路都会立即评估每个条件吗?
我可以使用嵌套的if
s
if (/abc/){
if (!/def/){
....so on
}
答案 0 :(得分:2)
&&
短路。它只在需要时评估其RHS操作数。如果它的LHS操作数返回错误,&&
将返回该值。
例如,
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
所以以下两行基本相同:
if (/abc/) { if (!/def/) { ... } }
if (/abc/ && !/def/) { ... }
实际上,if
会编译成and
运算符,所以上面的内容非常接近
(/abc/ and !/def/) and do { ... };
(/abc/ && !/def/) and do { ... };
答案 1 :(得分: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 /.
匹配