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

Leo*_*ard 12 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指向)是否适用于两个树,或者当我在不同的树(安装模块)工作时,我应该链接到不同的目录?

hob*_*bbs 9

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

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

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

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


jde*_*aan 5

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

如果您在新系统上从头开始重新安装新版本的perl,那么您将面临没有问题,因为在安装过程中将使用正确的头文件和库.