5

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

我的问题是,随着 perl 本身成为更高版本并且为它们开发模块,它们是否仍然向后兼容?“CPAN 不包含 Perl 的所有旧版本和补丁级别”,如果我创建文档说运行“cpan -i DBI”,如果最新版本的 DBI 不能与 5.8 一起使用?

4

3 回答 3

9

没有任何保证。

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

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

于 2012-01-26T23:17:46.417 回答
6

In general, no. There are a lot of great new features in recent releases of Perl (smart match operator, the // operator, for two one example) that are not backwards compatible. Many authors will decide to take advantage of these features rather than keep their modules compatible with older versions of Perl.

Check the CPAN Tester's Matrix of a module, including the link about the max version that passes all of the distribution's tests, to get an idea of what versions of Perl are compatible with each version of a module.

cpan -i Some::Module will indeed attempt to install the latest version of the module Some::Module, but with a little research, it can be used to install older versions too. You need to find or guess the author of an older version and provide the path to the distribution on the CPAN mirror servers. For example,

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

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

CPAN authors may delete their older distributions from CPAN. But even then, the distribution is available at the BackPAN if you're willing to download, unpack, and build the distribution yourself.

于 2012-01-26T23:33:29.603 回答
6

不是绝对的,但总的来说,perl 在破坏代码方面非常温和,没有太多的破坏性更改,而且确实发生的弃用周期很长。1999 年上传到 CPAN 的大部分代码将在 perl 5.14 中运行而无需修改。

自 perl 5.12 以来,perl 的发布周期变短了,弃用期也变短了,这令人担忧,但与此同时,特性版本控制的概念已经流行起来。这个想法是代码可以声明它所针对的 perl 版本use VERSION(例如use 5.16.0),并且任何未声明版本的代码都假定针对大约 5.10。当针对旧版 perl 版本的代码在新版 perl 上运行时,可能会导致兼容性问题的新功能(例如新关键字)被禁用,并且旧的错误功能可能会以兼容性的名义重新启用。这不是绝对的保证,但会尽可能地遵守。

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

于 2012-01-27T01:07:20.383 回答