我今天在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覆盖系统的默认版本。
如果您要更改详细的答案(包含文件和目录的名称),我将不胜感激。如果要更改这些答案以实现救赎。
谢谢!
答案 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
之前,因为我希望能够覆盖系统的默认版本。