5

我想在我的主目录中设置 Perl 5.10 以及当前机器上 /usr/local 中的古老 Perl。我不是这台机器的超级用户。

我找到了 require 5.10 HPUX perl二进制包,它似乎可以工作,但由于某种原因,它似乎假设它在 /usr/local 中运行(@INC 错误消息证明了这一点)。除了 PERLLIB 之外是否还有其他变量,例如 PERLHOME 或我需要设置的东西,以便 Perl 不会在 /usr/local 目录中查找任何内容?

PS 我在网上看到了在 ./Configure 步骤中编译和设置目录的建议,但是我一直很难在这个旧盒子上编译东西,所以我更喜欢使用预编译的 Perl,因为它似乎大部分都可以工作。


更新——Leon 回答了这个问题,所以基本上不可能从你的主目录正确运行 perl 二进制文件,除非它是在考虑到这一点的情况下编译的

4

3 回答 3

5

你不会喜欢这个答案的。

Perl 将@INC 作为字符串存储在其二进制文件中。在出现userelocatableinc重新定位 Perl 的技术之前,是对二进制文件进行搜索和替换,以及在 Config.pm 中更改它们。这就是 ActiveState 发布可重定位 Perl 的方式。

字符串必须保持与以前相同的大小,用空字节填充任何额外的空间。ActiveState 将通过使用诸如“/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTMPPATHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”之类的前缀配置 Perl 来解决此问题。这也使得在二进制文件中查找变得非常明确。你没有这样的运气,所以它只有在当前路径短于你想要替换它们的路径时才会起作用。

但这太复杂了。只需使用 HP/UX 的源代码为自己编译 Perl,或者从 perl.org 获取常规源代码。Perl 有一个专门的 HP/UX 开发人员,所以一切都应该顺利进行。

于 2009-02-26T23:30:40.583 回答
4

这取决于您的perl二进制文件是否可重定位。这是一个编译时选项。这个命令的输出是什么?是否已定义?

perl -V:userelocatableinc
于 2009-02-26T00:28:40.017 回答
-1

您可以在第一行中指向您想要的任何解释器路径:

!#/my/local/perl 

如果您不是在寻找跨机器的可移植性,您可以在脚本中手动设置@INC。我认为也有一种方法可以从环境中获取它,这可能更便携。

于 2009-02-26T01:07:57.770 回答