2010-07-12 60 views
5

我對Perl編程非常陌生。我剛剛讀完了這本書,到目前爲止,我已經在Bash中編寫腳本,但是我想嘗試一下Perl,它比Bash腳本編寫有好處。Perl編程和發佈

我創建一個使用多種標準模塊(例如的Getopt)的腳本和一些不那麼標準模塊(如PerlMagick

在某些時候,我想我的分發Perl代碼,我想它可以被不熟悉Perl或編程的人使用。顯然標準模塊應該總是在那裏(我使用「使用5.010」來保證這一點),但是什麼是非標準模塊呢?

我想有兩種可能性: 1)我應該告訴最終用戶安裝缺少的模塊嗎? 2)我應該創建一個測試模塊的安裝腳本,如果它們不在那裏,然後安裝它們? 如果選擇了選項2,我應該下載模塊並安裝它們嗎?或者用我的主代碼分發它們? 我只是不知道禮儀這樣的事情是什麼?

非常感謝你對所有的意見, 本

回答

5

如果你設計你的應用程序作爲一個Perl的分佈(如在CPAN使用),然後你可以使用Perl工具鏈來爲你處理這種事情。您只需確保您所依賴的模塊已在您的Makefile.PL中正確列出,然後有人只需編寫cpan YourApp::Name以獲取您的應用程序及其所需的一切內容。或者,如果他們從CPAN以外的地方下載應用程序,並且他們正在手動構建它,則make進程可以找到它們的依賴關係(這就是爲什麼Module::AutoInstall並非完全死亡並且不值得成爲IMO)的原因。

對於Windows用戶,在步驟cpan YourApp::Name之前必須添加的唯一內容是「安裝Strawberry Perl」。

您還可以選擇捆綁(無論是涉及PAR還是僅包含安裝程序或存檔,同時包含您的應用程序和所有必要模塊,可能還有perl本身),但這種技術有一個主要缺點:它意味着您不能使用任何 XS代碼,否則您必須爲您希望應用支持的每個不同平臺提供單獨的軟件包。 CPAN路線不會遇到這個問題。

1

如果您不想用prelccperlapp進行編譯 - 那麼任何可能性都可以使用。

  • 您檢查前人的精力目前正確 版本的模塊,爲您的Perl代碼 不要求像一些錯誤信息: 「在@INC 無法找到數據/ UUID.pm(@公司包含:...)「。例如:

    eval { use Data::UUID; }; 
    if([email protected]) { 
         print "Data::UUID not found\n"; 
    } 
    

    eval { use Text::ParseWords 3.23; }; 
    if([email protected]) { 
         print "Text::ParseWords 3.23 not found\n"; 
    } 
    
  • 您可以嘗試使用CPAN模塊(或UNIX CPAN程序)。喜歡,你可以 嘗試shell命令:

    cpan Data::UUID 
    

    或將Perl腳本:

    #!/usr/bin/perl 
    use CPAN; 
    CPAN::install("Data::UUID"); 
    
+0

Downvote:這不起作用,因爲'use'在編譯時運行。另外,我們已經有完美的依賴追蹤+安裝工具鏈,就像hobbs的回答所描述的那樣,不需要這個hackery。 – daxim 2010-08-15 23:58:26