如何使用ActivePerl 5.20 Mac OS X(/ usr / bin / perl)的默认路径代替/usr/local/ActivePerl...?

时间:2015-05-21 20:01:29

标签: macos perl path osx-mavericks activeperl

我今天在Mac OS X 10.9.5上安装了ActivePerl 5.20.2 检查终端(perl -v)中perl的版本,我看到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覆盖系统的默认版本。

如果您要更改详细的答案(包含文件和目录的名称),我将不胜感激。如果要更改这些答案以实现救赎。

谢谢!

2 个答案:

答案 0 :(得分:4)

  

问题是:在某种程度上可以将我的脚本中使用的目录从#!/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

答案 1 :(得分: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之前,因为我希望能够覆盖系统的默认版本。