Perl升级会破坏Linux上的旧版本吗?

时间:2009-04-21 13:58:41

标签: linux perl unix upgrade

我在Suse Linux上将perl从perl58升级到perl588。看起来即使旧版本存在Config.pm,新版本安装也会破坏旧版本。而在HP和AIX等其他操作系统上升级Perl会不打扰旧版本。 例如:perl58和perl588版本在文件夹中说“/ usr / standard_perl”如下:

/usr/standard_perl/perl58 (directory)
/usr/standard_perl/perl588 (directory)

并有指向它的符号链接。

升级前后链接如下:

之前:

perl58_link -> /usr/standard_perl/perl58

后:

perl5_link ->   /usr/standard_perl/perl588 
perl58_link ->  /usr/standard_perl/perl588
perl588_link -> /usr/standard_perl/perl588

现在,当我尝试从/ usr / standard_perl / perl58 / bin运行简单的“./perl -V”命令时,旧版本抱怨Config.pm未找到,即使它在自己的树结构中非常好。< / p>

在Linux中,perl是否遵循@ INC的硬编码路径。这种行为仅在Linux上被观察到。

我很担心因为有旧版本的脚本运行而无法进入生产阶段,如果存在这种行为,我需要知道是否可以修复或者这是Linux的已知行为。< / p>

我不确定是不是因为现在升级后的旧链接被指向更新的版本并且仅仅链接是不够的并且需要在LINUX上修改更多内容?

注意: 1.每个版本都单独维护perl模块 2.我没有将任何文件与以前的版本混合。 3.我们希望在生产服务器中运行的所有旧的perl脚本都不会中断并使用最新版本来代替Perl版本的主要版本。  3a。需要调整指向最新版本而不是自己版本的链接。

观察: 仅在Linux上看到此行为。 值得注意的一点是,当我将旧版本的链接调整到最新版本时。 @INC自动更新为最新版本INC而不是LINUX。

我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:3)

我在Linux上从未见过这个问题。我将原始perl保留在其位置(/ usr / bin / perl),并简单地编译我自己的perl以安装到/ usr / local / bin(或其他),并且从未见过旧版本的任何破坏。

你没有说

  • 你是如何得到一个/ usr / standard_perl / perl588(编译,以rpm格式或其他东西给出,预编译的tarball,......)
  • 配置编辑时使用的选项

你对你的细节也很模糊 - perl58_link,standard_perl等等 - 这到底在哪里?大多数时候它并不重要,但有时它确实如此。

如果您将链接移回,那么开始工作了吗?如果你将整个5.8.8树移动到其他地方,那么事情会开始起作用吗?你可以从RPM恢复你的基础perl或任何试图让它工作的东西吗? IMO,基础perl工作是至关重要的,辅助perl总是奖金。 (我对其他核心unix工具也有同样的看法,比如shell,awk,sed,甚至python或者你的发行版用于包管理的任何东西。对于像Java这样的非核心工具来说更少,但是如果我运行Java应用程序的话在制作中,我也会在这里说同样的内容。)

答案 1 :(得分:1)

单独保留系统perl可执行文件,编译自己的,并使用编译的

运行Perl程序


用Perl编写的所有系统程序都应该以:

开头
#! /usr/bin/perl

所有非系统Perl程序,用户编写的程序:

这个将使用在$PATH上首先找到的perl可执行文件。 (与“which perl”相同)

#! /usr/bin/env perl

另一个选项是准确指定您要使用的可执行文件的位置:

#! /opt/bin/perl

#! /opt/perl/bin/perl

#! /opt/perl/5.10.0/bin/perl

#! /opt/perl-5.10.0/bin/perl

#! /home/$user/perl/bin/perl

#! ~/bin/perl

或者perl可执行文件的路径是什么。

答案 2 :(得分:0)

永远不要将/usr/bin/perl替换为您自己编译的那个!

我在Ubuntu 7.10上做了一次,它破坏了我的系统。我可以登录,并做大部分事情,但我无法改变外观,例如。我最终在我的计算机上的每个Perl程序上运行“sudo nano $filename”,并更改它们以便它们在Perl 5.10下运行,而不是Perl 5.8。

之后我不得不从头开始安装Ubuntu 8.10,当它最终出来时。

如果使用cpancpanp安装模块,也可能会遇到不兼容问题,因为它们可能会发生不兼容的功能更改。对于非二进制兼容的perl可执行文件,您必须重新安装所有需要XSubs的模块。

这就是为什么我写的所有Perl程序都添加标题“#!/usr/bin/env perl”,并将Perl可执行文件的路径添加到$PATH变量的开头。