不同版本的Perl是否需要安装不同的CPAN模块?

时间:2010-06-13 20:21:09

标签: perl cpan

我们有一个服务器场,我们正在慢慢迁移到新版本的Perl(5.12.1)。我们目前正在运行5.8.5。操作系统也将从RedHat 4升级到RedHat 5,但RedHat 5仍然在Perl 5.8.8上。因此,在我们的源代码树中,我们将支持两个版本的Perl。

我被告知要将新版本的Perl安装到我们的源代码树中,以及我们当前使用的所有CPAN模块。我被告知用正确版本的Perl“编译”模块。我很困惑。对于不同版本的Perl,某些模块是否实际配置不同?鉴于此,我假设我应该在树中为每个Perl版本配置一个CPAN目录?

有关此方案的任何信息或“陷阱”?

编辑:作为一个额外的问题,同一个cpan目录(由〜/ .cpan指向)是否适用于两个树,或者当我在不同的树(安装模块)中工作时,我应该链接到不同的目录吗? / p>

4 个答案:

答案 0 :(得分:9)

任何使用XS(编译的C代码,动态加载)的perl模块通常只能使用与编译它们相同的perl版本。这有两个原因:

原因之一是默认情况下它们被安装到包含perl版本号的目录中,而perl的任何其他版本都不会查看该目录。

原因二是因为perl API可以在主要版本之间进行更改,因此即使您要将库复制到相应的目录中,它们可能会也可能不会起作用,具体取决于它们使用的功能,以及两个版本的不同之处perl是。在5.8和5.12之间存在显着差异,几乎可以打破所有代码。

但这并不适用于纯Perl 模块;它们可以自由地复制,只有极少数例外。这只是XS代码的问题。

答案 1 :(得分:5)

一些perl模块编译并链接到系统库。如果您升级操作系统,那么这些库可能不再存在,这将导致这些模块行为异常或根本不运行。因此,建议重新编译perl模块。

如果您在新系统上从头开始重新安装新版本的perl,那么您应该没有任何问题,因为在安装过程中将使用正确的标头和库。

答案 2 :(得分:4)

它不是Perl的版本,而是底层平台。 Redhat4和Redhat5与Perl 5.8.5和5.8.8有很大的不同。事实上,如果您发现这些版本之间存在差异,则可能是一个错误。

RH4和RH5具有不同的库集,并且必须针对这些库重新编译perl本机扩展。如果将这些已编译的树保留在源存储库中,则确实需要2棵树。如果你想避免这种情况,你可以“静态编译”,但这会非常混乱,并可能严重影响脚本的内存占用和相关的加载时间,不推荐(在许多情况下甚至不可能)。

一个更干净的解决方案是一个安装脚本,它从CPAN下载/编译/安装副本,并保持源树没有这些文物。您仍然可以决定是否要在目标计算机上作为安装的一部分执行此操作,或者作为在目标计算机上安装之前构建二进制包的一部分。

答案 3 :(得分:-1)

请查看下面提供的URL,了解如何为不同的CPAN安装模块。

http://perllinux.blogspot.in/2014/08/multiple-perl-cpan-on-single-machine.html

而且,是的,Perl的不同版本需要在所有这些版本上安装模块。