2011-07-26 69 views
0

我想分發我的Perl應用程序,它有一個CPAN依賴項。當有人啓動應用程序時,我可以包含對此依賴項的檢查嗎?通過命令行參數或直接在perl裏面?如何在Perl應用程序中包含CPAN依賴項?

+0

http://stackoverflow.com/questions/1094125/try-to-use-module-in-perl-and-print-message-if-module-not-available – 2011-07-26 21:21:31

回答

3

這是一個純粹的Perl模塊,沒有其他的依賴關係嗎?

我只是用我的代碼打包它。哎呀,你甚至可以將它附加到你的文件,如果你願意。

如果這有點複雜,也就是說,有十幾個必需的模塊必須安裝,並且需要一些編譯,您將不得不使用CPAN來下載它。有一個CPAN::AutoINC這是假設下載和安裝任何模塊,你需要CPAN當需要模塊,而不是在@INC路徑。

但是,我的經驗是,你最終會陷入一團糟。用戶可能會開始運行程序,認爲它只運行一分鐘,但發現他們花費20分鐘時間才能下載,編譯和測試必備模塊。

最好只是失敗,並給出一個很好的解釋。用戶可能更喜歡以根用戶身份運行cpan,因此它可供機器上的所有人使用。或者,也許他們需要讓系統管理員爲他們做。

我發現我可以做這樣的事情:

our $missingModuleFlag; 

BEGIN { 
    eval { require My::Mod; }; 
    our $missingModuleFlag = [email protected] if ([email protected]); 
} 

[...] 

our $missingModuleFlag; #Package Variable -- Value is from above 
if ($missingModuleFlag) { 
    die <<EOM; 
ERROR: You are missing module "My::Mod" which is required for 
    this program. Please use "cpan" to download this module 
    and install it on this server. If you have no idea what 
    I am talking about, see http://www.cpan.org/modules/INSTALL.html. 
    If that doesn't make any sense to you, then ask a system administrator. 
EOM 
} 

它說明了什麼問題,需要做什麼,併爲用戶提供了一個選擇,要麼與安裝繼續,或要求別人爲他們做。

5

除了此question中討論的多種方法之外,還可以考慮將必備模塊與代碼捆綁在一起。有幾種選擇可供您使用PAR,PAR::Packer和其他。

相關問題