DVK*_*DVK 15 perl coding-style call parentheses subroutine
在现代Perl中,&是可选的,如果子例程已经预先声明,则是括号.
我注意到很多时候,人们使用的事实是,在调用Perl子例程时可以省略括号(例如,从最近的SO答案中随机引用):
open my $fin, '<', $file;
Run Code Online (Sandbox Code Playgroud)
同样有效
open(my $fin, '<', $file);
Run Code Online (Sandbox Code Playgroud)
使用第二个(无括号)版本的主要(理想情况下,技术上)原因是什么?
除了再次提及选择性之外,perldoc perlsyn没有就该主题发表任何言论.
对我来说,由于我作为C开发人员的起源,总是使用括号主要是一种风格选择; 但我想知道我是否遗漏了不使用可选的无括号语法作为Perl开发人员的问题.
PS我完全清楚偏好带括号的版本的原因 - 例如间接对象表示法的问题,或者在没有括号的情况下使用非内置函数的要求,或者优先使用visavi orvs的问题||.我对相反的兴趣.
PPS我对答案并不是很感兴趣,只是在没有任何研究支持意见的情况下说明"它的风格更好"/"更具可读性".我对技术原因感兴趣,不喜欢括号遗漏,或支持风格差异偏好(请不要混淆"备份"与"诉诸权威"或"论证广告"谬误.研究显示速度提高或对代码的理解就是证据."Perl社区中的每个人都同意"或"Damien Conway建议这一点"而不解释Damien如何支持这一点并不是这样.
Joe*_*ger 15
我认为除了风格之外,它实际上唯一重要的时间是&subname根据perldoc perlsub很少使用的:
&NAME; # Makes current @_ visible to called subroutine.
Run Code Online (Sandbox Code Playgroud)
当然,在某些情况下(使用解析器和未来的读者),使用parens可能会更容易消除歧义,否则不使用它们可能会消除其他人的噪音; 其中任何一个是必要的程度可能是我选择其中一个的主要原因.
从Perl :: Critic :: Policy :: CodeLayout :: ProhibitParensWithBuiltins:
Conway建议在参数列表周围调用所有内置函数,不带括号.这减少了视觉混乱,并消除了用户功能的内置功能.
Conway是Perl Best Practices一书的作者.