1

我在 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,即使它很好地存在于它自己的树结构中。

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

我担心我无法投入生产,因为有些脚本已经为旧版本运行,如果存在这种行为,我需要知道它是否可以修复或者这是 Linux 的已知行为。

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

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

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

我在这里错过了什么吗?

4

3 回答 3

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 应用程序在生产中,我也会在这里说同样的话。)

于 2009-04-21T21:06:44.953 回答
1

保留系统perl可执行文件,自行编译,并让您的 Perl 程序使用您编译的程序运行


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

#! /usr/bin/perl

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

这将使用第一个在$PATH. (同' 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 可执行文件的路径是什么。

于 2009-04-22T16:57:46.527 回答
0

/usr/bin/perl永远不要用你自己编译的替换!

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

之后我不得不从头开始安装 Ubuntu 8.10,它终于出来了。

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

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

于 2009-04-23T16:49:14.903 回答