声明使用哪个版本的Perl的现代方式是什么?

时间:2009-12-10 01:25:45

标签: perl version

当谈到我们脚本需要什么版本的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?

3 个答案:

答案 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失败,因此它们将无法获得第二个更具体和可读的版本。