【问题标题】:How to use default path for ActivePerl 5.20 Mac OS X (/usr/bin/perl) instead of /usr/local/ActivePerl...?如何使用 ActivePerl 5.20 Mac OS X (/usr/bin/perl) 的默认路径而不是 /usr/local/ActivePerl...?
【发布时间】:2015-05-21 20:01:29
【问题描述】:

我今天在 Mac OS X 10.9.5 上安装了 ActivePerl 5.20.2 检查终端中 perl 的版本 (perl -v) 我看到 5.20.2 所以一切似乎都很好。但.. 当我启动我的 CGI 脚本时,脚本在 perl 内置(5.16)下运行(如果使用#!/usr/bin/perl)。 如果我使用#!/usr/local/ActivePerl5.20.2/bin/perl,那么它在所需的 5.20.2 下运行。

问题是:是否有可能将在我的脚本中使用的目录从 #!/usr/local/ActivePerl5.20.2/bin/perl 更改为简单而熟悉的 #!/usr/bin/perl 保持在 ActivePerl 下运行而不是内置。

我需要用新的 ActivePerl 覆盖系统的默认版本。

如果要更改答案以实现拯救,我将不胜感激您的详细答案(以及它们所在的文件和目录的名称)。

谢谢!

【问题讨论】:

  • 另外,在你的脚本中指定你想要的特定解释器是一个特性,不是应该避免的。
  • 似乎#!/usr/local/ActivePerl5.20.2/bin/perl 在您的shell 的$PATH 中的/usr/bin/perl 之前被发现。您可以在运行 CGI 脚本的环境中设置 $PATH 吗?然后,您可以将/usr/local/ActivePerl5.20.2/bin/ 放在路径的前面并调用#!/usr/bin/env perl。这可能有效,但最好指向特定版本。
  • @SinanÜnür 谢谢。这是错字(并且复制粘贴有错字)。当然,我的脚本在 shebang 行中没有拼写错误)))

标签: macos perl path osx-mavericks activeperl


【解决方案1】:

问题是:是否有可能将我的脚本中使用的目录从 #!/usr/local/ActivePerl5.20.2/bin/perl 更改为简单而熟悉的 #!/usr/bin/perl 保持在 ActivePerl 下而不是内置的运行。

甚至不要尝试。那样的话是诅咒,而不是救赎。指定将处理您的脚本的特定解释器的能力是一项重要功能。

相反,将您的 CGI 脚本打包为一个简单的 CPAN 模块。然后,使用熟悉的安装它

$ /usr/local/ActivePerl5.20.2/bin/perl Makefile.PL
$ make install

例行公事。 shebang 行将自动调整以反映用于构建和安装包的perl

【讨论】:

    【解决方案2】:

    首先,不要在脚本中指定 Perl 解释器的特定路径:

    #! /usr/local/ActivePerl5.20.2/bin/perl
    

    #! /usr/bin/perl
    

    指定:

    #! /usr/bin/env perl
    

    这将在您的$PATH 中找到第一个可执行的 Perl 解释器,然后使用它来执行您的 Perl 脚本。这样,您无需更改程序,只需更改 $PATH 变量即可。

    下一次,看看PerlBrew 安装不同版本的 Perl。 PerlBrew 将允许您在用户控制下安装多个版本的 Perl,并让您选择要使用的 Perl 版本。

    我还建议将/usr/local/bin 作为$PATH 中的第一个条目。然后,将要运行的可执行文件链接到该目录。你可以使用这样的东西来创建你的链接:

    for file in $/usr/local/ActivePerl5.20.2/bin/*
    do
        basename=$(basename $file)
        ln -s "$file" "/usr/local/bin/$basename"
    done
    

    这样,您要执行的所有程序都在同一个目录中,这使得设置$PATH 变得更加容易。我什至将/usr/local/bin 放在/usr/bin/bin 之前,因为我希望能够覆盖系统的默认版本。

    【讨论】:

    • 谢谢!请告诉我,如何定义 $PATH 变量?是在用户目录中的 .bash_profile 中吗?请给我一个简单的例子好吗?我现在有下一个字符串: PATH=/usr/local/ActivePerl-5.20/bin:$PATH PATH=/usr/local/ActivePerl-5.20/site/bin:$PATH export PATH
    • 我想覆盖系统的默认版本。这就是我想要的))
    • 您忘记了 OP 正在运行 CGI 脚本。恕我直言,将#!/usr/bin/env perl 放在一次性命令行脚本以外的任何地方都不是一个好主意。最好用Makefile.PL 打包它。然后,发生什么其他事情都没有关系。服务器每次都可以使用正确的perl
    猜你喜欢
    • 2018-01-15
    • 2013-04-22
    • 2011-07-18
    • 2015-02-03
    • 2022-01-12
    • 2019-04-29
    • 2021-06-08
    • 2014-01-06
    • 2015-02-03
    相关资源
    最近更新 更多