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

时间:2012-06-13 23:33:25

标签: perl apache

目前我正在尝试使用一堆自定义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";
}

在路径变量下,我确实看到了所有模块所在的文件夹。我还应该在其他地方添加到Perl Path吗?

另外添加使用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,向人们展示如何添加更多模块文件夹的类似问题。)

2 个答案:

答案 0 :(得分:3)

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'

答案 1 :(得分:1)

使用lib 是好的,如果你可以添加安装文件,否则你将不得不在每个perl脚本文件中添加它。比这样,你可以使用 PERL5LIB 环境变量。

perl中的

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

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