如何为CGI脚本设置Perl的@INC?
我有以下最简单的Perl CGI脚本:
I have the following, simplest Perl CGI script:
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 ),出现以下错误:
When called (http://[..]/cgi-bin/p.cgi) I am given the following error:
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.
我确保已安装模板,并且确实从外壳运行此程序时,它可以工作(加载模板)并输出:
I made sure that Template is installed and indeed when running this program from shell it works (loads Template) and outputs:
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
:
This directory is correctly listed in env
and, as previously posted, in @INC
. In @INC
it is shown twice, so I even tried to pop it out before calling use Template
, but without result. From 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
[..]
删除使用模板
可以解决问题。
我建议将以下内容添加到您的CGI
I would suggest adding the following to your CGI
use lib "/home/pistacchio/lib/" ;
PERL5LIB env变量可能不适用于CGI程序。
The PERL5LIB env variable is presumably not available to CGI programs.
编辑我的意思是,您从shell在PERL5LIB中设置的任何值都将不可用。
Edit What I meant, any value you have set in PERL5LIB from a shell will not be available.