【发布时间】:2013-04-02 19:44:22
【问题描述】:
& 在现代 Perl 中是可选的,如果子例程已预先声明,括号也是可选的。
我注意到很多时候,人们在调用 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,或优先visavi or 与|| 的问题。我感兴趣的是相反的。
附言我对仅仅说“它的风格更好”/“更具可读性”而没有任何研究支持这一观点的答案并不感兴趣。我对喜欢省略括号的技术原因或支持风格差异偏好感兴趣(请不要将“支持”与“诉诸权威”或"argumentum ad populum" 谬误混淆。一项研究显示速度或代码理解能力的改进就是证明。“Perl 社区中的每个人都同意”或“Damien Conway 建议这一点”而不解释 Damien 如何支持这一点不是)。
【问题讨论】:
-
我不使用括号来区分内置插件。这是我遵循的唯一规则。
-
@ugexe - 有区分内置插件的主要原因吗?还是只是习惯?
-
康威的建议似乎提供了完全是装饰/风格的原因。由于
CodeLayout::ProhibitParensWithBuiltins是Perl::Critic的内置规则之一,许多编码人员可能会发现遵守比编辑他们的.perlcriticrc更容易。选择最适合您的选项.... -
我想这是因为
perl想要支持不同的编码风格。曾经编程的人是 shell,使用printf "%d\n" $arg1;的形式很常见。对于 C 编码器,更可取的是printf("%d\n", arg1);样式。在perl中两者都可以使用。
标签: perl coding-style call subroutine parentheses