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