首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl脚本中的if-elsif-else块有什么问题?

Perl脚本中的if-elsif-else块有什么问题?
EN

Stack Overflow用户
提问于 2010-09-10 17:32:03
回答 3查看 330关注 0票数 0

我正在尝试为嵌套的if语句编写一个条件,但还没有找到在if语句中使用或的好例子。如果为$status == 6,则以下elsif条件将失败,并允许嵌套在该条件下的代码触发

代码语言:javascript
复制
if ($dt1 > $dt2 ) {do one thing}
elsif(($status != 3) || ($status != 6)) { do something else}
else {do something completely different}

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

EN

回答 3

Stack Overflow用户

发布于 2010-09-10 17:54:41

您的逻辑是错误的,并且您的elseif代码块将始终返回true。我想你的意思是用AND而不是OR。给定以下代码片段

代码语言:javascript
复制
foreach $status (1 .. 10) {
   if (($status != 3) && ($status != 6)) {
      print "$status => if\n";
   } else {
      print "$status => else\n";
   }
}

这将输出

代码语言:javascript
复制
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,所以它总是假的

票数 8
EN

Stack Overflow用户

发布于 2010-09-10 18:14:21

你说你问这个是因为代码有几行那么长。解决这个问题。:)

代码语言:javascript
复制
   if( $dt1 > $dt2 )                      { do_this_thing() }
elsif( ($status != 3) || ($status != 6) ) { do_this_other_thing() }
else                                      { do_something_completely_different() }

现在你在块中没有几行,所有的东西都是相邻的。您必须弄清楚这些条件是什么,因为任意值要么不是3,要么不是6。:)

也许你是想用and

代码语言:javascript
复制
   if( $dt1 > $dt2 )                   { do_this_thing() }
elsif( $status != 3 and $status != 6 ) { do_this_other_thing() }
else                                   { do_something_completely_different() }
票数 6
EN

Stack Overflow用户

发布于 2010-09-10 17:40:02

将带有变量名称/值的print语句放入每个分支中会很有帮助。

您可以看到elsif分支始终在运行,因为对于任何$status值,$status != 3 || $status != 6都是真的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3683533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档