为什么Perl中的'if'子句必须带有大括号或什么都没有?

时间:2011-04-03 10:36:38

标签: 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'子句必须带有大括号或什么都没有?

6 个答案:

答案 0 :(得分:9)

避免编译器构造中众所周知的问题,称为“悬挂其他”。见http://en.wikipedia.org/wiki/Dangling_else

答案 1 :(得分:6)

这就是perl语法的定义方式。 if (expr) BLOCK语法需要块,而不是语句。请参阅perlsyn(“复合语句”部分)。

摘录:

  

if语句很简单。因为BLOCK总是用大括号括起来,所以如果有其他的话,就不会有任何歧义。

答案 2 :(得分:5)

Perl语法相当复杂,难以解析。我认为,在if子句之后强制使用花括号,以消除歧义并使Perl代码更易于解析。

答案 3 :(得分:2)

当我尝试时,

if ($some_var==$some_value);并不“好”(我也没想到)。

为什么需要BLOCK,不允许使用普通EXPR?因为那是拉里想要的。

答案 4 :(得分:2)

我不知道curlies,但Larry发言说 parens 可能是可选的。我认为他决定反对它以保持代码可读。

答案 5 :(得分:1)

我认为它根本不受支持,但这是:print "some_message" if($some_var == $some_value);