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