2015-05-21 25 views
1

我今天在Mac OS X上安装了ActivePerl 5.20.2 10.9.5 检查终端中的perl版本(perl -v)我看到5.20.2 所以一切似乎都没有问题。但是.. 当我启动我的CGI脚本时,脚本在内置的perl下运行(5.16)(如果使用的是#!/usr/bin/perl)。 如果我使用#!/usr/local/ActivePerl5.20.2/bin/perl,那么它在5.20.2下运行,这是必需的。如何使用ActivePerl 5.20 Mac OS X(/ usr/bin/perl)而不是/ usr/local/ActivePerl的默认路径...?

的问题是:它在某种程度上可以改变目录用我的剧本从#!/usr/local/ActivePerl5.20.2/bin/perl以简单和熟悉#的activeperl下运行的/ usr/bin中/ perl的保管,而不是建立在

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

我将不胜感激你的详细答案(与他们所在的文件和目录的名称)如果要改变实施救赎。

谢谢!

+1

此外,在脚本中指定特定的解释器是***功能***,而不是要避免的。 –

+1

看起来''/!/ usr/local/ActivePerl5.20.2/bin/perl'在shell的'$ PATH'中的'/ usr/bin/perl'中被找到。你可以在运行CGI脚本的环境中设置$ PATH吗?然后你可以在路径中放置'/ usr/local/ActivePerl5.20.2/bin /'并调用'#!/ usr/bin/env perl'。 *可能*工作,但指向特定版本是最好的。 –

+0

@SinanÜnür谢谢。这是错字(和错字拷贝)。我的脚本,当然,没有错别字行))) – Arsenii

回答

2

第一,而不是你的脚本指定到你的Perl解释器的特定路径:

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

#! /usr/bin/perl 

指定此:

#! /usr/bin/env perl 

这将找到的第一个在您的$PATH中执行可执行的Perl解释器,然后使用它来执行Perl sc RIPT。这样,您不必更改程序,而只需更改$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之前,因为我希望能够覆盖这个系统的默认版本。

+0

谢谢!你能告诉我,请问如何定义$ PATH变量?是否在用户目录中的.bash_profile中?你能给我一个简单的例子吗? PATH =/usr/local/ActivePerl-5.20/bin:$ PATH PATH =/usr/local/ActivePerl-5.20/site/bin:$ PATH export PATH – Arsenii

+0

我想重写系统的默认版本。这就是我想要的)) – Arsenii

+1

你忘记了OP正在运行CGI脚本。恕我直言,把'#!/ usr/bin/env perl'放在除一次性命令行脚本以外的任何东西都不是一个好主意。最好用“Makefile.PL”打包。那么,还有什么事情没有关系。服务器每次都会使用正确的'perl'。 –

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

谢谢你的回答! – Arsenii