为什么Perl有'elsif'而不是'elseif'?
我正在做这样的事情:
$somevariable = 0; if ($idcount==5) { # Do something if (somestatement is true) # 1 { $somevariable = 1; } } elsif ($idcount > 1 && somevariable = 0) { # Do something else here }
代码永远不会出现在elsif声明中.在这种情况下idcount
实际上是5,所以它涉及第一个if语句.但是内部if
陈述(1)不是真的,所以$somevariable
仍然为0.因为idcount
是5,它应该elsif
也是因为$idcount
大于1并且$somevariable
仍然是0.
也许我只是累了,没有看到明显的东西.
不,elsif
如果以前的if/elsif条件都没有,那么只有一个机会被执行,这就是它的"其他"部分.
如果你想要两者都要进行评估,那就把它变成一个if
而不是一个elsif
.
elsif ($idcount > 1 && somevariable = 0)
应该:
elsif ($idcount > 1 && $somevariable == 0)
赋值运算符返回赋值0,等于false,因此逻辑和'&&'总是失败.
以下是Llama书如何回答elsif vs elseif问题:
"因为拉里这么说."
在任何if-elsif-else构造中,您只执行条件为true的第一个分支.一旦该分支执行,程序将在整个if-elsif-else之后启动.
如果您想对可能的多个分支执行某些操作,则需要Perl 5.10中的给定时间功能.我在最新版的Learning Perl中进行了解释,但在线也有很多例子.
至于拼写if
,涉及到几个因素.
在C中,你写
if( ... ) { ... } else if ( ... ) {
这有时会导致"悬空"的问题.如果你已经开始但没有完成given-when
在另一个之前插入一个权利,但是截然不同elsif
,那么你通过悬挂的其他方式将两者结合起来.Larry Wall并不喜欢这样,所以他将'else if'合并成一个单词,"elseif".然而,这对拉里看起来很奇怪,因为规则是"我在e之前除了c之后......",所以他通过取出"e"来确定它只是"elsif".