所有perl版本都支持旧模块吗?

时间:2012-01-26 23:09:30

标签: perl cpan dbi perl5.8

我在所有服务器上安装了Perl 5.8,并希望使用DBI和DBD :: Oracle模块来访问我们的数据库。我主要担心的是更新版本的perl DBI和DBD模块将停止使用5.8。然后我必须将每台服务器升级到最新的perl版本。

我的问题是,perl本身变成了后期版本,并且为它们开发的模块是否仍然可以向后兼容? “如果我创建文档说运行”cpan -i DBI“,如果最新版本的DBI不能与5.8一起运行,那么”CPAN不会带有Perl的所有古老版本和补丁级别“?

3 个答案:

答案 0 :(得分:8)

无法保证。

通常,您希望在所有系统上使用相同版本的模块。如果您使用不同的版本,那么您将在不同的服务器上提供不同的错误和功能。

我建议为你要使用的那些创建Debs / RPMS / etc,然后运行所有服务器共享的软件包存储库。

答案 1 :(得分:5)

一般来说,没有。最近发布的Perl(智能匹配运算符, //运算符, 2 一个示例)中有很多很棒的新功能,这些功能不向后兼容。许多作者将决定利用这些功能,而不是让他们的模块与旧版本的Perl兼容。

检查模块的CPAN Tester's Matrix,包括通过所有发行版测试的the max version链接,以了解Perl的哪个版本与模块的每个版本兼容。< / p>

cpan -i Some::Module确实会尝试安装最新版本的模块Some::Module,但经过一些研究,它也可用于安装旧版本。您需要查找或猜测旧版本的作者,并提供CPAN镜像服务器上的分发路径。例如,

cpan -i J/JF/JFRIEDL/Yahoo-Search-1.9.12.tar.gz

cpan -i A/AS/ASG/List-Gen-0.80.tar.gz

CPAN作者可能会从CPAN中删除旧的发行版。但即便如此,如果您愿意自己下载,解压缩并构建发行版,则可以在BackPAN处获得该发行版。

答案 2 :(得分:5)

不是绝对的,但总的来说perl对于破坏代码非常温和,没有太多的重大变化,并且对那些确实发生的变化有很长的弃用周期。 1999年上传到CPAN的代码中相当大的一部分将在perl 5.14中无需修改即可运行。

从perl 5.12开始,perl发布周期变得越来越短,弃用期也越来越短,这引起了人们的关注,但与此同时,功能版本控制的概念已经变得流行起来。我们的想法是,代码可以声明它使用use VERSION定位的perl版本(例如use 5.16.0),并且任何未声明版本的代码都假定为大约5.10。当针对较旧的perl版本的代码在较新的perl版本上运行时,可能会导致可能导致兼容性问题的新功能(例如新关键字),并且可能会以兼容性名称重新启用旧的错误。这不是绝对的保证,但它将尽可能地坚持。

有关反向兼容性和弃用的更多信息,请参见perlpolicy