我正在尝试为嵌套的if语句编写一个条件,但还没有找到在if语句中使用或的好例子。如果为$status == 6,则以下elsif条件将失败,并允许嵌套在该条件下的代码触发
if ($dt1 > $dt2 ) {do one thing}
elsif(($status != 3) || ($status != 6)) { do something else}
else {do something completely different}我希望避免为每个条件使用另一个elsif,因为实际驻留在这里的代码有几行长。
发布于 2010-09-10 17:54:41
您的逻辑是错误的,并且您的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如果对你的思考有帮助的话,一个条件句,也就是!something || !somethingElse总是可以重写为!(something && somethingElse)。如果你将这个应用到上面的例子中,你会说!(3 && 6),因为一个数字不能同时是3和6,所以它总是假的
发布于 2010-09-10 18:14:21
你说你问这个是因为代码有几行那么长。解决这个问题。:)
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() }发布于 2010-09-10 17:40:02
将带有变量名称/值的print语句放入每个分支中会很有帮助。
您可以看到elsif分支始终在运行,因为对于任何$status值,$status != 3 || $status != 6都是真的。
https://stackoverflow.com/questions/3683533
复制相似问题