2016-05-31 144 views
0

我在else if语句中有多个elsif条件。其他多个条件如果条件为真

如果多个条件为真,语句的流程是什么?那么在下面这个仅仅作为示范的简单例子中,是否达到了第二个elsif条件?

my $i = 1; 

if ($i == 1){ 
} 
elsif (i == 2){ 
} 
elsif (i == 1){ 
} 
else{ 
} 
+2

一旦条件成功,测试就会停止,这意味着'$ i = 1'时从未测试过第二个'$ i == 1'。 –

+0

五年来我还没有写过别的。我想不出一个elsif。 – k0pernikus

回答

5

容易尝试:

use feature ":5.10"; 

my $i = 1; 

if ($i == 1) { 
    say "A"; # this is the only branch executed 
} elsif (i == 2) { 
    say "B"; 
} elsif (i == 1) { 
    say "C"; 
} else { 
    say "D"; 
} 

每个elsif如果以前的条件没有成功,才考虑。您可以看到,甚至没有尝试进行比较:

if ($i == 1) { 
    say "A"; 
} elsif (i == 2/0) { # This doesn’t blow up since the comparison is never tried 
    say "B"; 
} else { 
    say "C"; 
} 
+1

(我认为'2/0'在编译时死掉,因为那是在评估'2/0'时,但现在这个异常被延迟了。) – ikegami

2

系统从if语句开始并检查条件。如果它是真的,它会执行语句的主体,然后跳过其余的else语句和else语句。如果它是假的,它会下移到第一个else语句列出。同样的过程发生:检查条件,如果是true执行正文并跳过其余的if和else语句;如果错误跳转到下一个else语句。

总之:else if语句从上到下依次选择。所以,如果你有两个如果两个都是真的语句,只有最高的一个会被执行。

1

第一场比赛将赢得其他esle/elsif块被跳过。

不,第二个elsif块将无法到达。