当谈到我们脚本需要什么版本的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?
答案 0 :(得分:7)
实际上只有两个选项:十进制数和v字符串。使用哪种表单部分取决于您希望通过有意义的错误消息“支持”而不是语法错误的Perl版本。 (在Perl 5.6中添加了v-string语法。)公认的最佳实践 - perlcritic强制执行 - 是使用十进制表示法。您应该指定脚本正常运行所需的最低Perl版本。通常,这意味着声明对主要版本中添加的语言功能的依赖性,例如使用5.10中添加的say
函数。如果脚本正常运行很重要,则应包括修补程序级别。例如,我的一些代码指定use 5.008001
,因为它取决于修复5.8.0中已修复的5.8.1中的错误。
答案 1 :(得分:7)
我只使用像5.010_001
这样的东西。我已经厌倦了处理版本字符串问题,因为这些问题应该让人感到非常简单。
由于我主要处理构建系统,因此我Module::Build
的内部version.pm
与CPAN上的version.pm
不同步。我认为现在情况好多了,但我有更好的想法。
最佳做法应该始终是做最少关注的事情,当然不会比它给出的价值更多地关注。在我看来,V字符串和点分十进制是一个巨大的分心,没有额外的好处,浪费了很多宝贵的程序员时间,只是为了回到起点。
我还应该注意到,Perl :: Critic经常推出可疑的做法,以达到减少人们做事方式的更高目的。但是,这些做法经常会导致问题,使它们变得不那么好。这是其中一个案例。更现实的最佳做法是不要让Perl :: Critic合规成为您的目标。在有用的地方使用它,但在这种情况下,不要浪费精神上的时间。
答案 2 :(得分:5)
“现代”方式是使用以v
开头的表单。但是,这可能不一定是你真正想做的事情。
批评者抱怨,因为旧版本的Perl无法理解并与以v
开头的表单很好地配合。但是,如果您的Perl版本支持它,v
更好阅读,因为您可以说:
use v5.10.1;
......而不是......
use 5.010_001;
因此,在use的文档中,提供了以下解决方法:
use 5.006; use v5.6.1;
NB: 我认为此处的文档存在错误,因为v
的示例中省略了perldoc use
。
由于不支持v
语法的Perl版本将在第一个use
失败,因此它们将无法获得第二个更具体和可读的版本。