2016-01-18 49 views
1

在/usr/local/share/perl5/mylib.pm第22行停止了/ apps/cgi/kb或​​/ apps/cgi中找不到lib。 編譯失敗,需要在www_kb_search_new_QA.pl第4行。 BEGIN失敗 - 編譯在www_kb_search_new_QA.pl第4行中止。perl腳本有「使用mylib」的問題

第4行是「use mylib;」

如果我評論「使用mylib;」該腳本執行正常和罰款,但我所有的腳本都有「使用mylib;」它很難改變所有的腳本。是否有任何程序更新所有perl庫的mylib.pm文件?

感謝, 格利揚

+0

@Borodin你可以請這個問題的幫助..... – kcnanduri

回答

1

有什麼程序來更新所有Perl庫的mylib.pm文件?

我想我介紹這my answer to your previous question

沒有什麼不對您的mylib安裝。問題在於它正在尋找一個名爲lib的目錄,它位於與Perl源文件相同的目錄中,或者位於上面的目錄中

如果它找到這兩個目錄中的一個,它將它添加到perl位置列表搜索任何後續use聲明中包含的模塊。那是全是它呢。它是利用當你寫了需要與主Perl程序文件

一起分發從你剛纔的問題你自己的Perl模塊,您的方案之一是/apps/cgi/kb/www_kb_search_new.pl,所以mylib正在尋找要麼

/apps/cgi/kb/lib 

/apps/cgi/lib 

,並找到兩者都不是。這是錯誤消息的原因

無法找到在/應用/ CGI/KB /或應用程序的lib/CGI

既然你說,當你刪除use mylib你的程序工作,它似乎你的程序不在這些位置使用任何模塊。這可能適用於您的所有程序,在這種情況下,解決方案應該是從所有程序中刪除use mylib聲明。使用簡單的shell命令很容易做到這一點

或者,您可以創建這些目錄中的一個或其他,並將其保留爲空。這樣mylib會正確執行,找到lib目錄,並將其添加到搜索列表中,但沒有庫將永遠不會從那裏加載

我希望現在很清楚嗎?

+0

Thankyou @Borodin,創建lib/in/aps/cgi效果很好,而apache通過正確讀取庫來執行腳本。 – kcnanduri

-2

'mylib.pm' 不是在PERL5LIB環境變量中列出的目錄中。

在測試時,您可以使用use lib 'path/to/module'解決方法。

因此,如果您正在測試使用模塊libs/mylib.pm的文件myscript.pl,則可以在use mylib;命令之前添加use lib 'libs/';

從長遠來看,你應該把在一個穩定的位置,你的模塊,以及

+0

不,錯誤不是'mylib.pm'找不到。 – ikegami

0

use mylib;用來告訴perl到哪裏去找相對於腳本安裝的模塊。這些通常是與腳本捆綁在一起的純Perl模塊。它尋找./lib../lib(相對於腳本所在的位置)。你的情況下,這些目錄都不存在。

腳本期望有一個lib目錄不在那裏的事實表明您缺少一些文件。如果是這樣,刪除use mylib;只會讓事情變得更糟。

如果不是假設是一個lib目錄,use mylib;不應被使用,並且應被刪除(其可以平凡使用一襯墊來完成[1])。在您的腳本所在的目錄中創建一個空的lib目錄也會阻止您的代碼死亡。


  1. find -name '*.pl' -type f -exec perl -i~ -pe's/^(?=use mylib;)/#/' {} +