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

发布于 2024-07-18 03:56:19 字数 1175 浏览 5 评论 0原文

我在 Suse Linux 上将 perl 从 perl58 升级到 perl588。看起来,即使旧版本存在 Config.pm,但新版本的安装会破坏旧版本。而在 HP 和 AIX 等其他操作系统上升级 Perl 不会干扰旧版本的 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 中。

我在这里错过了什么吗?

I upgrade perl from perl58 to perl588 on Suse Linux.It looks that even though the Config.pm exists for the older version the newer version installation breaks the older version.While the upgrade of Perl on other OSes like HP and AIX does not disturb the older version.
For eg: The perl58 and perl588 versions are present in folder say "/usr/standard_perl" as follows:

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

and have symbolic links pointing to it.

Before and after upgrade the links are as follows:

Before:

perl58_link -> /usr/standard_perl/perl58

After:

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

Now when i try to run simple "./perl -V" command from /usr/standard_perl/perl58/bin the older version complains of Config.pm not found even though its very well present in its own tree structure.

Is it that in Linux, perl is following a hard coded path for @INC.This kind of behaviour is observed only on Linux.

I am worried for I cannot roll to production for there are scripts that have been running for older version and if this kind of behaviour exists I would need to know if its possible to fix or this is a known behaviour of Linux.

I am not sure could this be because now the older links after upgrade is been pointed to newer version and just linking is not sufficient and need to modify something more on LINUX?

Note:
1.The perl modules are seperately maintained for each version
2.I am not mixing any of the files with previous version.
3. We want all of the old perl scripts running in production servers not to break and use latest version instead for the mainatainence of Perl versions.
3a.Hence a need to tweak the links pointing to latest version instead of their own versions.

Observation:
Only on Linux seeing this behaviour.
One point worth noting is when i twek links of older version to latest version. the @INC automatically is updated for latest version INC and not in LINUX.

Am i missing something here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧时模样 2024-07-25 03:56:19

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

你没有说

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

你也很模糊以及您的详细信息 - perl58_link、standard_perl 等 - 这到底在哪里? 大多数时候这并不重要,但有时却很重要。

如果您将链接移回,事情会开始起作用吗? 如果将整个 5.8.8 树移到其他地方,事情会开始工作吗? 你能从 RPM 或其他什么方式恢复你的基本 Perl 来让它工作吗? 在我看来,基本的 Perl 工作是最重要的,次要的 Perl 总是有好处的。 (我对其他核心 unix 工具持相同的看法,例如 shell、awk、sed,甚至 python 或您的发行版用于包管理的任何工具。对于 Java 等非核心工具则不然,但如果我运行 Java 应用程序在生产中,那么我也会在这里说同样的话。)

I've never seen this problem on Linux. I leave the original perl in its location (/usr/bin/perl), and simply compile my own perl to install to /usr/local/bin (or whatever), and have never seen any breakage of the old version.

You don't say

  • how you came to have a /usr/standard_perl/perl588 (compiled, given in rpm format or something, pre-compiled tarball, ...)
  • what options you used when configuring the compilation

You're also very vague with your details - perl58_link, standard_perl, etc. - where is this really? Most of the time it doesn't matter, but sometimes it does.

If you move the link back, do things start to work? If you move the entire 5.8.8 tree somewhere else, do things start to work? Can you recover your base perl from RPM or whatever to try to make it work? IMO, the base perl working is paramount, a secondary perl is always bonus. (I'd take the same opinion of other core unix tools, like shells, awk, sed, or even python or whatever your distro uses for package management. Less so for non-core tools like Java, but if I were running Java apps in production then I'd say the same here, too.)

凉宸 2024-07-25 03:56:19

保留系统 perl 可执行文件,编译您自己的 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 可执行文件的路径是什么。

Leave the system perl executable alone, compile your own, and have your Perl programs run using the one you compiled

All system programs written in Perl should start with:

#! /usr/bin/perl

All non-system Perl programs, user written programs:

This one will use which ever perl executable is found first on $PATH. (same as 'which perl')

#! /usr/bin/env perl

Another option is to specify exactly where the executable you want to use is:

#! /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

Or what ever the path to the perl executable is.

走走停停 2024-07-25 03:56:19

切勿将 /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 的开头变量。

Never replace /usr/bin/perl with one you compiled yourself!

I did this once on Ubuntu 7.10, and it broke my system. I could login, and do most everything, but I couldn't change the appearance, for example. I ended up running 'sudo nano $filename' on every Perl program on my computer, and change them so they would run under Perl 5.10, instead of Perl 5.8.

After which I had to install Ubuntu 8.10 from scratch, when it finally came out.

You could also experience incompatibilities if you use cpan or cpanp to install modules, because they could have an incompatible feature change. And for a non-binary compatible perl executable, you have to reinstall all modules that require XSubs.

Thats why all Perl programs that I write I add the header '#!/usr/bin/env perl', and add the path to the Perl executable, to the beginning of the $PATH variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文