2010-02-17 114 views
3

我是新來的Perl。當我運行腳本時,出現以下錯誤:爲什麼我的Perl程序抱怨「無法在@INC中找到URI.pm」?

Can't locate URI.pm in @INC (@INC contains: /usr/local/packages/perl_remote/5.6.1/lib/5.6.1/i86pc-solaris /usr/local/packages/perl_remote/5.6.1/lib/5.6.1 /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/i86pc-solaris /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1 /usr/local/packages/perl_remote/5.6.1/lib/site_perl .) at (eval 2) line 3. 
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/HTTP/Request.pm line 3. 
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/UserAgent.pm line 10. 
BEGIN failed--compilation aborted at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/UserAgent.pm line 10. 
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/Simple.pm line 26. 
BEGIN failed--compilation aborted at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/Simple.pm line 26. 
Compilation failed in require at txotf_0_install.pl line 35. 
BEGIN failed--compilation aborted at txotf_0_install.pl line 35.

這可能是什麼原因以及如何讓腳本工作。任何幫助將不勝感激。

+0

您通常可以通過從錯誤消息中搜索關鍵詞來找到答案。在這種情況下,搜索只是爲了「定位」導致你到http://stackoverflow.com/questions/65865/cant-locate-foo-pm-in-inc-whats-the-easiest-way-to-install -a缺失-perl的 – 2010-02-26 01:20:56

回答

8
  • 可能你沒有安裝URI。它可能不會保存在您的機器的任何位置,或者它可能「安裝」在某個位置。

    • 如果只是沒有安裝,那麼你需要從CPAN安裝它。
    • 如果您將它保存到您的機器中,您只需讓系統知道從哪裏獲得它。

如果你必須從CPAN安裝它,您可能需要管理員權限才能把它列出的目錄。但CPAN將允許您將其安裝到用戶目錄,因此您仍然可以安裝它。

所以,如果你不能在@INC列出的目錄中安裝模塊,那麼有各種方法。

  1. Perl 5讀取一個名爲PERL5LIB的環境變量。該「陣列」中的任何目錄將爲,前綴爲@INC。因此,目錄結構$ENV{PERL5LIB}中的任何內容都將優於任何系統目錄。 (請參見here

  2. 另一種方法是按腳本use lib編譯指示還將指定的目錄插入到@INC中。 (見lib

    use lib '/path/to/URI/module'; 
    use URI; 
    
  3. 最後一種方法,你可以做到這一點每運行。你可以用-I交換機命令行perl -I/path/to/URI/module -e 1上運行perl(見perlrun

1

數組@INC包含查找要評估的Perl腳本的位置列表。您的腳本不會運行,因爲它不在@INC列表中。要麼:

  1. 將腳本放在@INC位置之一中;或
  2. 將文件的位置添加到$ PATH環境變量;或
  3. 當您調用腳本時指定腳本的完整路徑。
+2

的問題,也可以使URI.pm模塊沒有安裝(在我的Ubuntu liburi-perl軟件包,但我不知道該模塊的Solaris上的名字) – ccheneson 2010-02-17 09:48:22

+0

好,未安裝或安裝目錄不在@INC中。 – 2010-02-26 01:21:22

7

非標準的路徑中@INC(如/usr/local/packagesperl_remote等)表示,我認爲這是安裝了用於特定目的的自定義perl可能會減少功能以防止惡作劇。

詢問系統管理員。

0

這並不是說任何其他的答案都不是很好的建議(他們很可能解決您的問題),但我遇到了類似的問題,讓我困惑了幾個小時。雖然我不確定這是否解決了OP的問題,但也許有人在將來遇到這個問題會省下一些時間排除故障......

我發現在新的CentOS服務器上,儘管@INC報告了我的自定義路徑包括庫以及儘管正確設置了所有文件和目錄權限,但mod_perl仍在使用消息「無法找到」有問題的模塊。這令人費解,因爲Apache PerlRequire使用的相同「use lib」語句的類似腳本能夠毫無問題地運行。

罪魁禍首竟然是SELinux,並且立即禁用了它。關於/ var/log/messages信息的更多細節使我對此以及其他一般抱怨的發現可以找到here

0

在我的情況下,我只是將perl文件夾複製到另一臺機器,並將bin文件夾的路徑添加到PATH環境變量中。爲了解決這個問題,我必須運行適當的ActivePerl安裝,最後爲perl設置所有環境。

相關問題