【问题标题】:Can I install a pre-configured Perl binary package in my home directory?我可以在我的主目录中安装预配置的 Perl 二进制包吗?
【发布时间】:2009-02-26 00:24:30
【问题描述】:

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

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

附:我看到advice online 在 ./Configure 步骤中编译和设置目录,但是我很难在这个旧盒子上编译东西,所以我更喜欢使用预编译的 Perl,因为它似乎主要工作。


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

【问题讨论】:

    标签: perl installation compilation


    【解决方案1】:

    你不会喜欢这个答案的。

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

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

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

    【讨论】:

    • 感谢有关 activestate 等的额外信息,所以我确实从头开始编译 perl 并且它确实有效,但是仍然遇到 PAR 的 @INC 问题,所以很快就会出现新问题。谢谢
    【解决方案2】:

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

    perl -V:userelocatableinc
    

    【讨论】:

    • perl -V:userelocatableinc userelocatableinc='undef';
    • 那你就不走运了。你必须自己编译它。
    • 这是否意味着它不起作用?所以你的答案基本上是没有办法把这个二进制文件放在我的主目录中,因为当有人编译它时没有设置这个变量。假设他们有,那么它将如何工作?
    • 一个可重定位的 perl 使用相对路径,所以它基本上会做你期望它做的事情。
    【解决方案3】:

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

    !#/my/local/perl 
    

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

    【讨论】:

    • 如果没有使用上面 Leon 指定的选项编译,二进制文件中有一些硬编码的默认路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多