2010-06-13 67 views
12

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

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

有关这种情况的任何信息或“陷阱”?

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

回答

9

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

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

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

尽管如此,这完全不适用于纯Perl模块;除了极少数例外,它们可以自由复制。这只是XS代码问题。

5

一些perl模块编译并链接到系统库。如果你升级你的操作系统,那么这些库就不再存在了,这会导致这些模块不正常或者根本不运行。因此,建议重新编译你的perl模块。

如果您在新系统上重新安装新版本的perl,那么您应该不会遇到任何问题,因为在安装过程中将使用正确的标题和库。

4

它不会是Perl的版本,而是底层平台的问题。 Redhat4和Redhat5比Perl 5.8.5和5.8.8更加不同。事实上,如果你发现这些版本有所不同,这可能是一个错误。

RH4和RH5具有不同的库集,并且必须针对这些库重新编译perl本机扩展。如果您将这些编译的树保存在源代码库中,那么您确实需要2棵树。如果你想避免这种情况,你可以'静态编译',但这会变得非常混乱,可能会严重影响脚本的内存占用空间和相关加载时间,不建议(在很多情况下甚至不可能)。

一个更清洁的解决方案将是一个安装脚本,它从CPAN下载/编译/安装副本并保持源代码树免于这些工件。您仍然可以决定在目标计算机上进行安装的一部分,还是在目标计算机上安装之前构建二进制包的一部分。

-1

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

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

而且,是的,需要的Perl的不同verisons要对所有的人安装的模块。

+0

请引用或总结文章,而不是简单地提供一个链接。这样,即使来源消失,您的答案仍然有帮助。 – Brian 2014-08-26 17:30:33

+0

@Gautam Prashant:总结文章:) :) – 2015-03-17 20:43:40