我有以下,最簡單的Perl CGI腳本:如何爲CGI腳本設置Perl的@INC?
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.
運行這個時,我確信,模板安裝,確實程序從它的工作原理(加載模板)和輸出:
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
[[email protected] i386-linux-thread-multi]$ pwd
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[[email protected] i386-linux-thread-multi]$ ls
auto perllocal.pod Template Template.pm
此目錄將在env
正確列出,如前面貼,在@INC
。在@INC
中顯示了兩次,所以我甚至在撥打use Template
之前試圖將其彈出,但沒有結果。從env
:
[[email protected] 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
擺脫這個問題。
你說Template是在@INC中,但是如果你在CGI輸出中讀到@INC,你會發現它顯然不是。 – 2010-04-21 12:42:17