我正在尝试为嵌套的if语句编写一个条件,但是没有找到使用if语句的好例子。以下elsif
条件失败,并允许嵌套在其下的代码触发$status == 6
:
if ($dt1 > $dt2 ) {do one thing}
elsif(($status != 3) || ($status != 6)) { do something else}
else {do something completely different}
我想避免为每个条件设置另一个elsif,因为实际驻留在这里的代码是几行。
答案 0 :(得分:8)
您的逻辑错误,您的elseif块将始终返回true。我认为你的意思是使用AND而不是OR。给出以下代码段
foreach $status (1 .. 10) {
if (($status != 3) && ($status != 6)) {
print "$status => if\n";
} else {
print "$status => else\n";
}
}
这将输出
1 => if
2 => if
3 => else
4 => if
5 => if
6 => else
7 => if
8 => if
9 => if
10 => if
如果它有助于你的思考,那就是条件!某事|| !somethingElse总是可以改写为!(某事&& somethingElse)。如果你把它应用到上面的情况你会说!(3&& 6),并且看到一个数字不能同时是3和6,它总是假的
答案 1 :(得分:6)
你说你问这个是因为代码长了几行。解决这个问题。 :)
if( $dt1 > $dt2 ) { do_this_thing() }
elsif( ($status != 3) || ($status != 6) ) { do_this_other_thing() }
else { do_something_completely_different() }
现在,您在块中没有多行,并且所有内容都彼此相邻。您必须弄清楚这些条件是什么,因为任何值都不是3或不是6. :)
也许您打算使用and
:
if( $dt1 > $dt2 ) { do_this_thing() }
elsif( $status != 3 and $status != 6 ) { do_this_other_thing() }
else { do_something_completely_different() }
答案 2 :(得分:1)
将带有var名称/值的print
语句放入每个分支可能会有所帮助
您可以看到始终运行elsif
分支,因为$status != 3 || $status != 6
对于$status
的任何值都为真。