根据
perldoc perlsub:
The & is optional in modern Perl,as are parentheses if the subroutine has been predeclared.
我注意到很多次,人们使用这样的事实,即在调用Perl子例程时可以省略括号(例如,从最近的SO答案中随机引用):
open my $fin,'<',$file;
同样有效
open(my $fin,$file);
使用第二(无括号)版本的主要(理想的,技术的)理由是什么?
perldoc perlsyn没有说什么话题,再次提到可选性.
对于我来说,总是使用括号大多是一种风格选择,因为我作为C开发人员的起源;但是我想知道,如果我没有使用可选的无括号的语法作为Perl开发人员缺少某些东西.
附:我完全知道用括号代替版本的原因 – 例如the issues with indirect object notation或requirement to declare non-builtins before they are used without parenthesis,或优先签证或vs ||.我对相反感兴趣
P.P.S.对于只是说“更好的风格”/“更可读”的答案,我并不感兴趣,没有任何研究支持意见.我有兴趣的技术原因是偏爱括号遗漏,或支持风格差异偏好(请不要将“备份”与“权力上诉”或“argumentum ad populum”的谬误混淆,显示速度提升或代码理解的研究是“Perl共同体中的每个人都同意”或“Damien Conway建议”,而不解释Damien如何支持这一点.
解决方法
我认为除了风格以外,其实很重要的唯一时间是根据
perldoc perlsub的很少使用的& subname:
&NAME; # Makes current @_ visible to called subroutine.
当然,在某些情况下(使用解析器和未来的读者),使用括号可能会更容易消除歧义,否则不使用它们可能会消除其他语言中的噪音;其中任何一个是必要的程度可能是我会选择一个或另一个的主要原因.