如何设置Perl';s@INC用于CGI脚本?
我有以下最简单的Perl CGI脚本:如何设置Perl';s@INC用于CGI脚本?,perl,module,cgi,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"; } 调用()时,会出现以下错误: Can't locate Template.pm in @INC (@INC contains: /usr/lib/perl5/site
use strict;
use warnings;
use CGI();
use CGI::Carp qw(fatalsToBrowser);
use Template;
print CGI::header();
foreach(@INC) {
print "$_\n";
}
调用()时,会出现以下错误:
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线程多线程中
[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
可以解决这个问题。我建议在CGI中添加以下内容
use lib "/home/pistacchio/lib/" ;
PERL5LIB env变量可能对CGI程序不可用
编辑我的意思是,您在shell的PERL5LIB中设置的任何值都将不可用。Web服务器不是以您的用户身份运行的,因此它的环境不是您的用户环境。根据您的Web服务器,您可以通过多种方式进行设置。在Apache中,您可以使用以下指令:
SetEnv PERL5LIB /path/to/your/libs
这也适用于它之下的一切。例如,如果您将其保存在.htaccess文件中,它将应用于该目录下的所有内容
如果你做不到这一点,你就必须自己用pragma设置每个脚本中的
@INC
值。哦,添加use lib“/home/pistacchio/lib/perl5/lib/i386 linux thread multi”PERL5LIB环境变量确实可以用于CGI程序,这不是您在用户帐户中设置的值。您说模板在@INC中,但如果您在CGI输出中读取@INC,您会发现它显然不是。