为什么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.
也许我只是累了,没有看到明显的东西。
答案 0 :(得分:12)
不,elsif
中的任何内容只有在之前的if / elsif条件都没有的情况下才有可能被执行,这就是它的“其他”部分。
如果您希望对它们进行评估,只需将其设为if
而不是elsif
。
答案 1 :(得分:11)
elsif ($idcount > 1 && somevariable = 0)
应该是:
elsif ($idcount > 1 && $somevariable == 0)
赋值运算符返回赋值0,等于false,因此逻辑和'&&'总是失败。
答案 2 :(得分:11)
以下是the Llama book如何回答elsif vs elseif问题:
“因为拉里这么说。”
答案 3 :(得分:7)
在任何if-elsif-else构造中,您只执行条件为true的第一个分支。一旦该分支执行,程序将在整个if-elsif-else之后启动。
如果要对可能的多个分支执行某些操作,可以使用多个if
块构建自己的类似于case的语法。 Perl 5.10中有一个given-when
构造,但它已经退回到实验状态,可以从语言中删除。
至于elsif
的拼写,涉及到几个因素。
在C中,你写了
if( ... ) {
... }
else if ( ... ) {
这有时会导致“悬空”的问题。如果你已经开始但没有完成在另一个if-else if
之前插入if
但是截然不同的{{1}},那么你通过悬空的其他方式将两者结合起来。 Larry Wall并不喜欢这样,所以他将'else if'合并成一个单词,“elseif”。然而,对于Larry看起来很奇怪,因为规则是“我在e之前除了c之后......”,所以他通过取出“e”来确定它只是“elsif”。
答案 4 :(得分:4)
我不知道你的混淆与perl使用“elsif”而不是“else if”或“elseif”的事实有什么关系。在我曾经使用的每种语言中,从20世纪70年代以前的FORTRAN到Java,以及像Easytreive这样的“亮点”,如果你做“如果cond ...... else ......”之后的其他语言如果原始“cond”为真,则执行。这就是“其他”的含义。
在你的情况下,“cond”是“($ idcount == 5)”,你已经说明是真的,而其他部分没有被执行,因为它是真的是“if($ idcount> 1&& $ somevariable == 0)......“。
答案 5 :(得分:3)
Perl有elsif,因为perl不允许C风格“否则如果”没有括号。相反,你需要有类似的东西:
if (x) {
}
else {
if(y) {
}
}
答案 6 :(得分:2)
答案 7 :(得分:1)
use strict;
use warnings;
$somevariable = 0;
if ($idcount==5)
{
# do something
if ( 1 )
{
$somevariable = 1;
}
}
else
{
if ($idcount > 1 && somevariable == 0) # this line was wrong in the question
{
# do something else here
}
}
use Modern::Perl;
$somevariable = 0;
given($idcount){
when( 5 ){
# do something
if ( 1 ){
$somevariable = 1;
}
}
when( $_ > 1 && $somevariable == 0 ){
# do something else here
}
}
use Modern::Perl;
是相同的
use strict;
use warnings;
use 5.010;
答案 8 :(得分:0)
如果您要使用任何语言的if...elsif
,您的条件应该是互斥的。您的示例中的两个条件可以同时为真,因此您应该将其分解为两个单独的if
语句。