2010-04-21 107 views
1

我有以下,最簡單的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擺脫這個問題。

+1

你說Template是在@INC中,但是如果你在CGI輸出中讀到@INC,你會發現它顯然不是。 – 2010-04-21 12:42:17

回答

4

我建議加入以下到您的CGI

use lib "/home/pistacchio/lib/" ; 

的PERL5LIB環境變量大概是不提供給CGI程序。

編輯我的意思是,你在shell中設置的任何值在PERL5LIB中將不可用。

+0

嗨,感謝您的輸入,但沒有任何變化 – pistacchio 2010-04-21 07:58:58

+0

哦,它工作添加使用lib「/ home/pistacchio/lib/perl5/lib/i386-linux-thread-multi」 – pistacchio 2010-04-21 09:45:41

+2

PERL5LIB環境變量確實可用於CGI程序,這僅僅是您在用戶帳戶中設置的值。 – 2010-04-21 12:22:39

3

網絡服務器不會以您的用戶身份運行,因此其環境不是您的用戶環境。您可以根據您的網絡服務器以各種方式進行設置。在Apache中,您可以使用SetEnv指令:

SetEnv PERL5LIB /path/to/your/libs 

然後這適用於它下面的所有內容。例如,如果您使用.htaccess文件,則該文件適用於該目錄下的所有文件。

如果你不能做那樣的事情,你可以用lib附註將你的值設爲@INC

相關問題