如何在OSX上覆盖httpd.conf中的@INC设置

时间:2011-10-10 21:29:15

标签: perl apache configuration cgi

如何设置Perl在OSX上的Apache httpd.conf文件中查找模块的位置?

我已经通过CPAN安装了几个模块,这些模块已成功安装在

/opt/local/lib/perl5/site_perl/5.8.9

我可以通过perldoc perllocal

验证这一点

如果我在命令行上运行perl -V,我会(在其他目录中):

@INC:
  /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level
  /opt/local/lib/perl5/site_perl/5.8.9

然而,当我通过Apache运行perl脚本作为CGI时,我得到的错误是找不到我use的模块。 @INC中包含的目录列表与我的本地perl配置不匹配。

[error] [client 127.0.0.1] Can't locate Spreadsheet/ParseExcel.pm in @INC (
 @INC contains: 
     /Library/Perl/Updates/5.8.8 
     /System/Library/Perl/5.8.8/darwin-thread-multi-2level 
     /System/Library/Perl/5.8.8 
     /Library/Perl/5.8.8/darwin-thread-multi-2level 
     /Library/Perl/5.8.8 
     /Library/Perl 
     /Network/Library/Perl/5.8.8/darwin-thread-multi-2level 
     ...

在OSX上运行perl作为CGI时@INC如何设置 - 以及如何覆盖它?

1 个答案:

答案 0 :(得分:6)

构建@INC时,perl的初始值是硬编码的,但可以通过多种方式进行修改。这里最方便的是

SetEnv PERL5LIB ...

从Apache配置中,或使用

use lib qw( ... );

来自Perl脚本。

也就是说,使用Perl 5.8.9和Perl 5.8.8安装的模块是不安全的(尽管反过来是安全的)。更糟糕的是,一个似乎是一个线程Perl而另一个不是。修改@INC根本不起作用。

您需要使用与要用于运行脚本的perl相同的perl安装模块,或者必须使用与用于安装脚本的{{1}}相同的{{1}}运行脚本。模块。