如何设置 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 运行时,出现错误,提示无法找到我正在使用
的模块。 @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 - 我如何覆盖它?
最佳答案
@INC
的初始值在构建 perl
时是硬编码的,但可以通过多种方式对其进行修改。这里最方便的是
SetEnv PERL5LIB ...
从 Apache 配置中,或使用
use lib qw( ... );
从 Perl 脚本中。
也就是说,将使用 Perl 5.8.9 安装的模块与 Perl 5.8.8 一起使用是不安全的(尽管反过来也是安全的)。更糟糕的是,一个似乎是线程化的 Perl 而另一个不是。修改 @INC
根本行不通。
您需要使用与您打算用来运行脚本的相同的 perl
安装模块,或者您必须使用与运行脚本相同的 perl
来运行脚本用于安装模块的那个。
关于perl - 如何在 OSX 上覆盖 httpd.conf 中的 @INC 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718918/