如何设置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如何设置 - 以及如何覆盖它?
答案 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}}运行脚本。模块。