目前,我正在尝试在带有 WebUI 的 Perl 程序中使用一堆自定义 perl 模块, test.pm 作为其中之一。我在安装了 Apache2 的 Windows 7 机器上运行它。当我使用 perl test.pl 在 cmd 提示符下运行程序时,程序运行良好。但是在 Apache 上运行它会给我这个错误。
[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm
[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm
我用过:
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p> \n";
}
在路径变量下,我确实看到了所有模块所在的文件夹。还有其他地方我应该用来添加到 Perl 路径吗?
另外添加 use lib "C:\testpm\"; 我的代码只将@INC 更改为
(@INC contains: C:\testpm\ C:/Perl/lib C:/Perl/site/lib .)
您需要做一些额外的事情来添加路径以在 apache 服务器上运行自定义 perl 模块吗?
基于答案的解决方案: 我发现这是最好的。在我的 httpd-perl.conf 文件中,我添加了以下几行:
<IfModule env_module>
SetEnv PERL5LIB "C:\testpm;C:\testpm1;"
</IfModule>
(用 C:\testpm1 扩展,向有类似问题的人展示如何添加更多模块文件夹。)