【问题标题】:Will all perl versions support older modules?所有 perl 版本都支持旧模块吗?
【发布时间】:2012-02-20 01:28:02
【问题描述】:

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

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

【问题讨论】:

  • Perl 5.8 是当前 Perl 5 稳定版之后的三个主要版本。我建议至少升级您的内部软件。您可以使用 Perlbrew 安装更新的 perl 而不会干扰系统 perl(这可能取决于您的发行版提供的系统工具)。
  • “CPAN 只支持最新版本的模块”——这不是真的——你可以下载仍然托管在 CPAN 服务器上的任何旧版本的模块(这需要特别的努力从分发中删除旧版本,所以许多作者从不打扰)。如果发行版放弃了对特定 perl 版本的支持,您可以请求模块作者在 CPAN 上保持旧版本以支持旧版用户。
  • 你也可以找到这篇使用文章:Visualizing the Perl 5 support policy

标签: perl cpan dbi perl5.8


【解决方案1】:

没有保证。

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

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

【讨论】:

  • 是的,我同意我正在考虑安装相同版本的唯一方法,但它是在谈论创建 CPAN 的镜像以执行此操作。有些服务器是 Windows 系统,这就是为什么我想进行 CPAN 类型安装而不是创建包的原因。
【解决方案2】:

一般来说,不会。在最近的 Perl 版本中有很多很棒的新特性(智能匹配操作符,// 操作符,two 为例)不向后兼容。许多作者会决定利用这些特性,而不是让他们的模块与旧版本的 Perl 兼容。

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

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 获取分发版。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多