Apache2 服务器上的自定义 Perl 模块



目前,我正在尝试使用一堆自定义的perl模块,test.pm 作为其中之一,在我的Perl程序中使用WebUI。我在安装了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";
}

在 path 变量下,我确实看到了所有模块所在的文件夹。我应该用别的地方来添加到Perl Path吗?

此外,在我的代码中添加使用库"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 扩展,向有类似问题的人展示如何添加更多模块文件夹。

PATH 环境变量与 perl 从哪里加载模块无关,也就是说@INC。您说您的路径在@INC,但在您显示的错误消息中,它不是。

Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at

应在服务器启动期间调用use lib。请参阅 http://perl.apache.org/docs/2.0/user/handlers/server.html#Startup_File。

另外,尝试删除尾部斜杠,例如 use lib 'C:testpm' .

如果可以添加安装程序文件,则使用lib是很好的,否则您必须将其添加到每个perl脚本文件中。您可以使用环境变量PERL5LIB

而不是这样做。

Perl 中的@INC不获取 PATH 环境变量的值,而是可以从环境变量中获取PERL5LIB值。

您可以在 apache 配置中添加SetEnv PERL5LIB path_to_modules_directory指令。在执行perl脚本时,您的perl脚本将在原始@INC值的前面添加此路径。

最新更新