2012-06-13 56 views
2

目前我正在嘗試在我的Perl程序中使用一組自定義perl模塊,test.pm作爲其中一個模塊,並帶有WebUI。我在安裝了Apache2的Windows 7機器上運行它。當我使用perl test.pl在cmd提示符下運行程序時,程序運行良好。然而,在Apache上運行它給了我這個錯誤。Apache2服務器上的自定義Perl模塊

[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm 
[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm 

我用:

foreach $key (sort keys(%ENV)) { 
    print "$key = $ENV{$key}<p> \n"; 
} 

和路徑變量下,我看到的,所有的模塊所在的文件夾。有什麼地方我應該用來添加到Perl路徑?

另外加入使用庫「C:\ testpm \」;我的代碼只改變@INC到

(@INC contains: C:\testpm\ C:/Perl/lib C:/Perl/site/lib .) 

是否有你需要做的路徑添加到運行Apache服務器上的自定義Perl模塊額外的東西?

解決方案根據答案: 我發現這個工作效果最好。在我的httpd-perl.conf文件,我添加了這些行:

<IfModule env_module> 
    SetEnv PERL5LIB "C:\testpm;C:\testpm1;" 
</IfModule> 

(伸出與C:\ testpm1顯示對於類似問題,人們如何添加更多的模塊文件夾。)

回答

1

使用LIB是好的,如果你可以在設置文件中添加,否則你將不得不將它添加在每一個Perl腳本file.Rather不是這樣,您就可以使用PERL5LIB環境變量。

@INC在Perl不採取PATH環境變量的值,而是可以從PERL5LIB環境變量。

你可以在你的Apache configuration.Your perl腳本添加SetEnv PERL5LIB path_to_modules_directory指令在原@INC值之前,而執行你的Perl腳本將添加此路徑。

3

的PATH環境變量對perl將加載模塊的位置沒有影響,即@INC。你說你的路徑在@INC,但在你顯示的錯誤信息中,它不是。

Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at 

在服務器啓動期間應該調用use lib。見http://perl.apache.org/docs/2.0/user/handlers/server.html#Startup_File

此外,請嘗試刪除尾部斜槓,例如use lib 'C:\testpm'