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

标签 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 运行时,出现错误,提示无法找到我正在使用的模块。 @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/

相关文章:

excel - Perl Spreadsheet::ParseExcel 无法解析并返回 undef

perl - 如何使用 Perl 生成基本图形的图像?

apache - 无法访问此站点 - XAMPP 忽略自定义域虚拟主机

apache - 在 apache 日志中显示子域

perl - 运行 Inline::C 时出错

perl (Statistics::PCA): 不能使用字符串 ("0") 作为 ARRAY ref while "strict refs"

apache - 重定向错误 : Wordpress + Let's Encrypt (Certbot) + SSL only + non-www

configuration - 读取 MSBuild 任务中的配置值

asp.net web 配置错误

php - 为什么我的 php 标签会转换成 html 注释?