2012-06-13 29 views
2

目前我正在尝试在我的Perl程序中使用一组自定义perl模块,test.pm作为其中一个模块,并带有WebUI。我在安装了Apache2的Windows 7机器上运行它。当我使用perl test.pl在cmd提示符下运行程序时,程序运行良好。然而,在Apache上运行它给了我这个错误。Apache2服务器上的自定义Perl模块

[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路径?

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

回答

1

使用LIB是好的,如果你可以在设置文件中添加,否则你将不得不将它添加在每一个Perl脚本file.Rather不是这样,您就可以使用PERL5LIB环境变量。

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

你可以在你的Apache configuration.Your perl脚本添加SetEnv PERL5LIB path_to_modules_directory指令在原@INC值之前,而执行你的Perl脚本将添加此路径。

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'