嵌套IF或单个IF中的多个条件 - perl

时间:2013-07-10 23:20:03

标签: perl if-statement nested

我在Perl中有一些代码用于多个条件

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

#### do something
}

每条线路都会立即评估每个条件吗?

我可以使用嵌套的if s

来区分条件的优先级
if (/abc/){

  if (!/def/){

  ....so on

}

2 个答案:

答案 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 /.

匹配