说到确定我们脚本所需的Perl版本,我们有多种选择,嗯,伙计,我们有很多选择:
use 5.010;
use 5.010_001;
use 5.10.0;
use v5.10;
use v5.10.0;
所有的都似乎可以工作。perlcritic会对除了前两个之外的所有代码进行抱怨。(不幸的是,v字符串似乎有这样的缺陷, 因为Perl 6希望你在Perl 6脚本中使用use v6;
...)
那么,我们应该做什么来指示我们想要使用特定版本的perl呢?
说到确定我们脚本所需的Perl版本,我们有多种选择,嗯,伙计,我们有很多选择:
use 5.010;
use 5.010_001;
use 5.10.0;
use v5.10;
use v5.10.0;
所有的都似乎可以工作。perlcritic会对除了前两个之外的所有代码进行抱怨。(不幸的是,v字符串似乎有这样的缺陷, 因为Perl 6希望你在Perl 6脚本中使用use v6;
...)
那么,我们应该做什么来指示我们想要使用特定版本的perl呢?
实际上只有两种选项:十进制数和v-字符串。使用哪种形式在一定程度上取决于您想要“支持”的Perl版本,以便提供有意义的错误消息而不是语法错误。(v-字符串语法是在Perl 5.6中添加的。)被接受的最佳实践 - 这也是perlcritic强制执行的 - 是使用十进制表示法。您应该指定脚本所需的最低Perl版本才能正常运行。通常这意味着声明对主要发布中添加的语言功能的依赖,例如使用在5.10中添加的say
函数。如果补丁级别对于脚本的正确行为很重要,则应包括它。例如,我的某些代码指定use 5.008001
,因为它依赖于5.8.0存在的一个错误的修复,在5.8.1中得到了修复。
我只是使用类似于5.010_001
的东西。我已经厌倦了处理本应该非常简单的版本字符串问题。由于我主要处理构建系统,所以我不断地与Module::Build
的内部version.pm
进行斗争,它与CPAN上的version.pm
不同步。我认为现在情况大多好转了,但我有更好的事情要考虑。
最佳实践应该始终是做那些需要最少关注的事情,而且肯定不会比所带来的价值更加引人注目。在我看来,v-strings和点十进制数是一个巨大的干扰,没有额外的好处,浪费了很多宝贵的程序员时间,只是为了回到起点。
我还应该指出,Perl::Critic经常推广可疑的做法,以减少人们处理事情的方式。然而,这些做法经常会引起问题,使它们不是最佳的。这是其中之一。更现实的最佳实践是不要将Perl::Critic的合规性作为您的目标。在有用的情况下使用它,在这种情况下,不要在心理上浪费时间。
“现代”方法是使用以v
开头的表单。然而,这可能并不是你真正想要做的。
Critic抱怨因为旧版本的Perl无法理解和与以v
开头的表单友好地交互。然而,如果您的Perl版本支持它,v
更易于阅读,因为您可以这样说:
use v5.10.1;
相较于...
use 5.010_001;
use 5.006; use v5.6.1;
注意:我认为这里的文档有误,因为在perldoc use
的示例中省略了v
。
由于不支持v
语法的Perl版本会在第一个use
失败,因此它们将无法到达第二个更具体和可读性更强的语法。
v
字符串,然后在示例中省略了v
而没有提到它们是可选的。这是有效的代码,但它与引言不匹配。 - Adam Bellaire