有關Perl的最好的東西之一是CPAN,Perl綜合檔案網絡。這是一種鏡像服務,自從Perl 5最初推出以來,允許用戶通過標準的通用工具cpan
客戶端共享有用的附加模塊,如XML::Simple
或SOAP::Lite
。幾乎所有的Perl發行版(如Linux附帶的Strawberry Perl和大多數Perl發行版)都配置了一個CPAN客戶端,並且包含在其中。該客戶端只需知道模塊的名稱即可讓人們從CPAN下載和安裝模塊。
幾乎CPAN上的所有模塊分配都遵循完全相同的佈局。它們通常有一個Makefile.PL
文件(如果它使用ExtUtils :: MakeMaker生成安裝腳本),Build.PL
文件(如果它使用Module :: Build生成安裝腳本)或兩者。這些Perl腳本一旦運行,就會創建一個'Makefile'或'Build'文件,讓您可以安裝該模塊並驗證是否滿足所有先決條件。
如果你之前從未做過Perl發行版,你可以從CPAN下載你想要的任何發行版,並看看事情是如何佈置的。一旦你看到一個文件夾和文件位置非常直觀。它們通常使用安裝腳本和支持文件(如自述文件)放在根目錄中,使用lib
目錄中的自定義模塊(您製作的模塊),並在t
目錄中進行單元測試。
如果你是一個新手,我建議你看基於Build.PL
的那些;這些都是純粹的基於Perl的安裝腳本。如果您決定製作基於Module.PL的發行版,則指定您的模塊發行版需要XML::Simple
和SOAP::Lite
是非常簡單的。首先,創建一個基本的基於Module :: Build的安裝腳本。這看起來像這樣:
use Module::Build;
my $build = Module::Build->new(
module_name => 'Foo::Bar',
license => 'perl',
requires => {
'perl' => '5.6.1',
'Some::Module' => '1.23',
'Other::Module' => '>= 1.2, != 1.5, < 2.0',
},
);
$build->create_build_script;
(這是從Module::Build::Authoring docs採取)。
然後,指定您需要的庫和它們的最低版本。如果你不在意Zero(0)是可以接受的版本,但這意味着「任何事物」都是好的。我建議至少指定要測試的機器上安裝的庫的版本。
(利落的短切:你可以發現,有做定義的$ VERSION包變量任何庫的版本:
perl -MSome::Lib -E "say Some::Lib->VERSION()"
)
安裝模塊,操作步驟看是這樣的:
cd folder\where\my\lib\is
perl Build.PL
Build
Build test
Build install
這將創建安裝工具,用於測試準備的文件夾(通常只是複製的東西,以簡單的模塊,構建庫面積),運行所有.T SCR在t
文件夾中的ipts(「tests」,通常使用Test::More
在安裝之前對模塊進行單元測試),然後最後將模塊安裝到您的PC的Perl站點庫中。
Build
腳本作爲'設置事項'階段的一部分,將查看您的先決條件,並警告您是否還沒有它們。
然後,如ikegami's answer所指出的那樣,如果您使用cpanm客戶端來安裝您的庫,那麼cpan客戶端將會自動出去,下載,測試併爲您安裝您的依賴關係!另外,基於Build.PL
的安裝程序也具有「installdeps」選項,它將執行相同的操作。然後,即使它們將來發生變化,也會自動下載,測試和安裝任何和所有依賴項(以及潛在的遞歸依賴項)。
嗨,羅伯特。非常感謝您的詳細解釋。我只是想確保我理解正確。所以基本上我需要將我的腳本打包爲發行版的一部分,並安裝最終用戶(我的腳本,依賴項:SOAP :: Lite和XML :: Simple)?最終用戶如何運行我的腳本呢?通過說「使用___」在其他腳本中導入它? – 2012-07-05 18:01:40
首先,您將創建一個Module分配,指定腳本的所有依賴關係。然後,你會發布該模塊分發,並讓人們安裝它。安裝完成後,你的腳本也會被安裝(只要把它放在發行版的'bin'文件夾中,我想。) – 2012-07-05 22:57:27
另外,如果你不'想要:你可以創建一個只有空的「My :: Script :: Deps」庫的分發版,你的腳本會檢查以確保已安裝(通過在腳本中使用'My :: Script :: Deps' )然而,將腳本與其他Module分發包打包使得管理對任何庫的更改以及腳本本身都是一個版本化單元非常方便! – 2012-07-05 23:03:00