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

标签 perl apache

目前,我正在尝试在带有 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 扩展,向有类似问题的人展示如何添加更多模块文件夹。)

最佳答案

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'

关于perl - Apache2 服务器上的自定义 Perl 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11024833/

相关文章:

java - 如何在 ubuntu 中从 java 执行 perl 脚本

perl - 如何在 Perl 中合并两个 FASTA 文件(一个带有换行符的文件)?

java - 自动完成功能在 Apache ISIS Action 中不起作用

apache - 当我访问 HTTPS 时,网站一直重定向到 HTTP,原因不明

php - php 的 apache 中的虚拟服务器和别名有什么区别?

apache - 如何在 .htaccess 中设置代理

regex - 如何从 Perl 中的字符串中提取子字符串?

regex - 过滤掉不在集合中的字符

javascript - 如何使用 extjs 调用服务器端脚本并让用户下载文本响应?

apache - 使用 mod_rewrite (ajaxplorer) 无形地将根重写到子目录