代码之家  ›  专栏  ›  技术社区  ›  Leonard

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

  •  12
  • Leonard  · 技术社区  · 14 年前

    我们有一个服务器场,正在缓慢地迁移到新版本的Perl(5.12.1)。我们目前运行5.8.5。操作系统也将从Redhat4升级到Redhat5,但是Redhat5仍然回到了Perl5.8.8上。因此,在我们的源代码树中,有一段时间我们将支持两个版本的Perl。

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

    关于这个场景的任何信息或“了解”?

    编辑:作为一个附加问题,同一个CPAN目录(由~/.cpan指向)是否可以同时用于两个树,或者当我在不同的树(安装模块)中工作时,我应该在不同的目录中链接?

    4 回复  |  直到 10 年前
        1
  •  9
  •   hobbs    14 年前

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

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

    原因二是因为PerlAPI可以在主要版本之间更改,所以即使您要将库复制到适当的目录中,它们可能工作,也可能不工作,这取决于它们使用的特性以及Perl的两个版本有多不同。在5.8和5.12之间,几乎所有代码都有可能被破坏,这是有显著差异的。

    这根本不适用于 纯perl 但是,模块可以随意复制,很少有例外。只有XS代码才是问题所在。

        2
  •  5
  •   jdehaan    14 年前

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

    如果在新系统上从头开始重新安装新版本的Perl,那么应该不会遇到任何问题,因为在安装过程中,将使用正确的头和libs。

        3
  •  4
  •   Peter Tillemans    14 年前

    它将不是Perl的版本,这是一个问题,而是底层平台。Redhat4和Redhat5与Perl5.8.5和5.8.8有很大的不同。实际上,如果您发现这些版本之间存在差异,可能是一个bug。

    rh4和rh5有不同的库集,必须根据这些库重新编译Perl本机扩展。如果将这些已编译的树保存在源存储库中,那么实际上需要2个树。如果您想避免这种情况,您可以“静态编译”,但这会变得非常混乱,并可能严重影响内存占用和脚本的相关加载时间,不推荐(在许多情况下甚至不可能)。

    一个更干净的解决方案是安装脚本,它从CPAN下载/编译/安装副本,并保持源代码树中没有这些人工制品。在目标计算机上安装之前,您仍然可以决定是作为目标计算机上安装的一部分,还是作为构建二进制包的一部分。

        4
  •  -1
  •   Gautam Prashant    10 年前

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

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

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