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

nic*_*ola 5 syntax perl if-statement

还行吧:

if ($some_var==$some_value) {}
Run Code Online (Sandbox Code Playgroud)

这也没问题:

print "hello" if ($some_var==$some_value);
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

if ($some_var==$some_value) print "some_message";
Run Code Online (Sandbox Code Playgroud)

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

tad*_*dmc 9

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


Mat*_*Mat 6

这就是perl语法的定义方式.该if (expr) BLOCK语法需要一个块,而不是一个声明.请参阅perlsyn("复合语句"部分).

摘抄:

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


swe*_*rup 5

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

  • 歧义消除,是的,但不容易解析; 解析器(以前是yacc,现在是野牛)可以简单地改为不需要{}. (5认同)
  • 这是因为烦人的C bug,大括号是可选的.使它们成为非可选项可以解决这个问题. (3认同)