我有以下最简单的 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/