Ric*_*uck 2 apache perl configuration cgi
如何设置Perl在OSX上的Apache httpd.conf文件中查找模块的位置?
我通过CPAN安装了几个模块,这些模块已成功安装
/opt/local/lib/perl5/site_perl/5.8.9
Run Code Online (Sandbox Code Playgroud)
我可以通过验证 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
Run Code Online (Sandbox Code Playgroud)
但是,当我通过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
...
Run Code Online (Sandbox Code Playgroud)
在OSX上运行perl作为CGI时@INC如何设置 - 以及如何覆盖它?
构建@INC时初始值是硬编码的perl,但可以通过多种方式进行修改.这里最方便的是
SetEnv PERL5LIB ...
Run Code Online (Sandbox Code Playgroud)
从Apache配置中,或使用
use lib qw( ... );
Run Code Online (Sandbox Code Playgroud)
从Perl脚本中.
也就是说,使用Perl 5.8.9和Perl 5.8.8安装的模块是不安全的(尽管反过来是安全的).更糟糕的是,一个似乎是一个线程Perl而另一个不是.修改@INC根本不起作用.
您需要使用与perl要用于运行脚本的模块相同的方式安装模块,或者必须使用与perl用于安装模块的脚本相同的方式运行脚本.