perl - 如何为 CGI 脚本设置 Perl 的 @INC?

标签 perl module cgi

我有以下最简单的 Perl CGI 脚本:

use strict;
use warnings;
use CGI();
use CGI::Carp qw(fatalsToBrowser);

use Template;

print CGI::header();

foreach(@INC) {
    print "$_\n";
}

调用 ( http://[..]/cgi-bin/p.cgi ) 时出现以下错误:

Can't locate Template.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /home/pistacchio/webapps/htdocs/cgi-bin/p.cgi line 8.
BEGIN failed--compilation aborted at /home/pistacchio/webapps/htdocs/cgi-bin/p.cgi line 8.

我确保安装了模板,并且确实在从 shell 运行该程序时它可以工作(加载模板)并输出:

Content-Type: text/html; charset=ISO-8859-1

/home/pistacchio/lib/perl5
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
/home/pistacchio/lib/perl5/lib
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/5.8.8

模板安装在/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi

[pistacchio@web118 i386-linux-thread-multi]$ pwd
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[pistacchio@web118 i386-linux-thread-multi]$ ls
auto  perllocal.pod  Template  Template.pm

此目录在 env 中正确列出,并且如前所述,在 @INC 中列出。在@INC 中它显示了两次,所以我什至试图在调用use Template 之前弹出它,但没有结果。来自 env:

[pistacchio@web118 i386-linux-thread-multi]$ env
[..]
PERL5LIB=/home/pistacchio/lib/perl5:/home/pistacchio/lib/perl5/lib:/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[..]

删除 use Template 可以解决这个问题。

最佳答案

网络服务器不作为您的用户运行,因此它的环境不是您的用户环境。您可以根据您的网络服务器以多种方式进行设置。在 Apache 中,您可以使用 SetEnv指令:

 SetEnv PERL5LIB /path/to/your/libs

这适用于其下的所有内容。例如,如果您将它放在 .htaccess 文件中,它适用于该目录下的所有内容。

如果您做不到那样的事情,您将无法使用 lib 在每个脚本中自己设置 @INC 的值。语用。

关于perl - 如何为 CGI 脚本设置 Perl 的 @INC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680997/

相关文章:

perl - 保存内容时 LWP::UserAgent 内存使用情况

java - 从运行时加载的 java 9 模块加载类时出现 ClassNotFoundException

forms - 在 Apache 上运行 C/C++ CGI 脚本是否危险?

perl - 如何编写CGI脚本以通过ssh执行远程脚本并显示来自远程执行的数据?

regex - 在perl中选择变量的一部分

perl - 将空行插入 Excel 文档

perl - 任何人都可以向我解释这个只读异常吗?

module - use 关键字中的有效路径根是什么?

javascript - Node.JS 的插件系统

cgi - 如何写入系统/端口/输入?