模块:在文档中应该何时提及所需的Perl版本?

3

在文档中不再提及作为要求的最高Perl版本是哪个? 例如,我从未见过:需要Perl 4或更高版本。

4个回答

7

最终,向用户提供额外信息并没有什么害处,因此,如果您知道与非常旧的版本不兼容的情况,最好还是提一下。

Perl 4被认为是一门独立的语言,所以没有必要提到它;就像没有人期望C++程序能在C中运行一样。

从人们在这个论坛上的问题来看,5.8仍然被广泛使用。因此,如果您想制作一个经过充分测试且尽可能广泛实用的模块,我认为至少要回溯到那个版本进行测试是个好主意。

如果您需要特定版本才能运行,使用您的模块内的require VERSION命令可能有助于强制执行此要求。这样,如果用户尝试在过旧的版本上运行您的模块,他们会收到清晰的错误信息。


2
我同意“说出你需要的东西不会有坏处”的观点,虽然我可能是个老古董,但我倾向于提及任何大于5.6.1的要求(即如果你的代码在5.8上可以工作但在5.6上不能,你应该提到这一点)。话虽如此,我期望任何人编写新代码的最旧版本应该是5.8.3。 - hobbs

4
记录下你实际测试的最古老的Perl版本,无论它是什么。不要猜测;不兼容性会悄然而至。正如其他人所提到的,用use v5.x在你的代码和模块元数据中声明你的最低版本。
你需要往回追溯多久呢?取决于你愿意支持和测试的最旧版本。这需要你投入时间和可能的挫败感。你往回走得越远,错过的功能就越多,可用的CPAN模块就越少,需要解决的错误也就越多。
如果你正在使用线程或Unicode,请尽可能使用最新的版本。Unicode支持一直在改进。线程从5.8开始非常有问题,在5.10中变得更加稳定,并且自那时以来还在不断改进。
5.10.1是一个非常安全的最低版本,你可以使用autodie、parent、压缩和存档模块、defined-or、say、given/when、smart match和命名捕获等功能。特别之处在于,它修复了智能匹配的工作方式,与5.10.0不兼容。这是Debian stable所提供的版本,对于兼容性来说是一个很好的下限。这是大多数CPAN模块可靠支持的最早版本。
再往前一步是5.8.9,是5.8系列中的最后一个版本。这是你可能在类似正常生产环境的任何地方看到的最古老的Perl版本。你会失去很多功能,线程可能无法很好地工作,Unicode仍然有点摇摆不定,而且CPAN模块开始出问题。
再往前是5.8.4,是已知的最早由主流操作系统Solaris提供的Perl版本。这里有一个操作系统版本和它们所附带的Perl版本的便捷列表
再往前是5.6.1。虽然5.6.2包含了许多错误修复,但从未被广泛采用。此时,你已经深入到了灰尘飞扬的老旧安装程序之中,它们永远不会升级。线程和Unicode支持存在,但形式非常不同,而且很容易出问题。许多CPAN模块不支持5.6。
5.005_03和5.004_04是下一个崩溃的边缘。此时,这已经变成了一种折磨或学术练习。你可能会发现一些非常老的安装程序仍在运行,或者一些“在添加线程和Unicode之前Perl更好”的死硬粉丝。
在5.004之前,一些非常常见的语法,如foreach my $foo是不可用的。

+1 对于之前版本的许多有趣信息。 - dan1111

3

www.perl.org:

当前版本:Perl 5.16.1

所以可能需要提及的是5.10以上的版本。

我使用Modern::Perl。

简介

现代化的Perl程序使用多个模块来启用Perl和CPAN的附加功能。不要复制和粘贴所有这些use行,而是只写一个:

use Modern::Perl

为了向前兼容性,我建议您将年份作为单个可选导入标记进行指定。例如: use Modern::Perl '2009'; use Modern::Perl '2010'; 两者都启用了5.10的功能。
另请参阅: perldoc Modern::Perl 或 https://metacpan.org/module/Modern::Perl

1
甚至是5.8以上的任何版本,我在生产服务器上经常看到这个版本。 - Bohdan

2
如果你知道最低版本要求,为什么不把它记录下来呢?依赖通常在README文件中记录,并在Makefile.PL或Build.PL中指定给安装程序。
Perl的支持版本只有5.14和5.16,但仍有许多人使用5.8和5.10。我甚至偶尔听到5.5和5.6的使用情况。

由谁提供支持?只有最新的稳定版才有可能获得官方的错误修复版本。ActiveState免费支持5.14和5.16,并将销售对旧版本的支持。真正重要的是CPAN模块的支持情况。 - Schwern
@Schwern,Perl5 Porters。不,只有最新的两个稳定版本会得到错误修复版本。(例如,Perl 5.14.3 几天前发布了。) - ikegami
哦,我没看到他们实际上发布了另一个5.14版本! - Schwern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接