如何设置Perl';s@INC用于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

我有以下最简单的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_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,您会发现它显然不是。