0

我正在尝试为嵌套的 if 语句编写条件,但没有找到在 if 语句中使用 or 的好例子。以下elsif条件失败并允许嵌套在它下面的代码在以下情况下触发$status == 6

if ($dt1 > $dt2 ) {do one thing}
elsif(($status != 3) || ($status != 6)) { do something else}
else {do something completely different}

我想避免为每个条件使用另一个 elsif,因为实际驻留在此处的代码有几行长。

4

3 回答 3

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

如果它有助于你的思考,一个条件就是 !something || !somethingElse 总是可以重写为 !(something && somethingElse)。如果您将其应用于上面的案例,您会说!(3 && 6),并且看到一个数字不能同时是 3 和 6,它总是错误的

于 2010-09-10T09:54:40.733 回答
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() }
于 2010-09-10T10:14:20.637 回答
1

print带有 var 名称/值的语句放入每个分支会很有帮助。
您可以看到elsif分支始终运行,因为$status != 3 || $status != 6对于$status.

于 2010-09-10T09:40:02.057 回答