为什么必须';如果';Perl中的子句要么带花括号,要么什么都不带?
这没关系:为什么必须';如果';Perl中的子句要么带花括号,要么什么都不带?,perl,if-statement,syntax,Perl,If Statement,Syntax,这没关系: if ($some_var==$some_value) {} 这也可以: print "hello" if ($some_var==$some_value); 但这带来了一个错误: if ($some_var==$some_value) print "some_message"; 为什么Perl中的“if”子句必须带花括号或不带任何内容?我认为它根本不受支持,但这是:打印“some_message”if($some_var==$some_value)这就是perl语法的定义方式
if ($some_var==$some_value) {}
这也可以:
print "hello" if ($some_var==$some_value);
但这带来了一个错误:
if ($some_var==$some_value) print "some_message";
为什么Perl中的“if”子句必须带花括号或不带任何内容?我认为它根本不受支持,但这是:
打印“some_message”if($some_var==$some_value)代码>这就是perl
语法的定义方式。if(expr)块
语法需要块,而不是语句。参见(“复合语句”部分)
摘录:
if语句很简单。因为块总是以花括号为边界,所以如果使用else,则不会有任何歧义
if($some\u var==$some\u value)代码>在我尝试它时不是“ok too”(我也没料到会是)
为什么需要块,而不允许普通表达式?因为这正是Larry想要的。Perl的语法相当复杂,很难解析。我推测,在if子句后面必须加上花括号,以消除歧义并使Perl代码更易于解析。以避免编译器构造中众所周知的问题,即“悬空的else”。请看我不知道卷发的情况,但拉里·斯伯德提到,帕伦斯可能是可选的。我相信他决定不这样做是为了保持代码的可读性。如果前面有一条语句,那就“ok”if($foo)打印“hello!”
.oops,对不起,这个“if(子句);”不是okoh是的,但是[print“hello”if(1==1);“是的]@nicola:你把语句修饰符和控制流结构混合在一起,完全没有抓住要点。歧义消除,是的,但不容易解析;解析器(以前的yacc,现在的bison)可以简单地更改为不需要{}。好吧,Larry一直在谈论他是如何重构语法以减少产品数量以处理Perl语法的。这就是我所说的易于解析的意思:产品的设计。之所以这样做是因为恼人的C错误,大括号是可选的。将其设为非可选解决了这个错误。我已经编程20多年了。在这段时间里,我犯了很多很多很多的编码错误。把if语句的else搞乱了,或者忘记了依赖块的括号,这肯定是我犯过的最罕见的错误之一。人们真的很难做到这一点吗???!你很困惑。它不可能什么都没有。括号是必须的。而且有很好的理由。如果你你想要一个不带块的if
语句,为什么不像$some\u var==$some\u value那样使用和,并打印“some message”;
类似于if
的语句修饰符形式,但参数是相反的。