CPAN - Comprehensive Perl Archive Network 的中文名稱為「Perl 綜合典藏網」,是各種程式語言線上典藏網的始祖,在它之後許多語言也複製類似的模式,比如 R 語言的 CRAN、Tex 語言 CTAN、Python 語言的 PyPI 與 PHP 語言的 PEAR 等。
CPAN 網站自從 1995 年十月上線以來,已經累積了 101,232 個 Perl 模組,共 23,715 個套件,9330 個作者,在全世界有 269 個鏡像伺服器,而且這些數字還在迅速累加。幾乎開發者需要的所有功能在 CPAN 網站上都能找得到實作,而且因為 Perl 程式語言秉持 TMTOWTDI (There's More Than One Way To Do It) 的哲學,針對不同特性強化的實作往往不只一個,讓開發者與使用者可以選擇最適合自己的模組。
CPAN 的使用分成兩個部份:CPAN 網站,以及使用者本機電腦上的工具程式。
cpan
: 通常只要裝了 Perl 就會附上這個最傳統的工具。cpanp
: 自 2007 年開始加入預載的強大 CPAN 工具。cpanm
: 新的工具,資源消耗量少,不需繁雜的設定,極為推薦。ppm
: 專有工具,不支援某些模組。如同 Perl 本身,CPAN 相關工具存在或支援大部分現有的軟硬體。以下將針對三種類型的作業系統簡略介紹如何安裝 Perl 以及上面提到的 cpanminus
。古老的 cpan 不用另外安裝,只要有 Perl 就有 cpan
指令工具。
微軟的 Windows 系統上並沒有預設安裝 Perl,所以必須自行安裝。可以選擇的有老牌商業公司 ActiveState 推出的 ActivePerl 以及 OpenSource 的 Strawberry Perl 。我們將以 Strawberry Perl 為安裝範例,它甚至包涵了 C 編譯器和 make
工具。
▲ 圖1:安裝 Perl 於 Windows 上
Perl 被喻為 Unix 系統上的瑞士刀。幾乎所有 Unix-like 的系統都預設有 Perl,不需自行安裝。若進行手動安裝,則必須安裝「make」這個工具以及 C 編譯器。
在 Ubuntu 與 Debian 系的系統上可以透過 apt 安裝,請於命令列模式下,輸入下列指令:
$ sudo apt-get install make gcc
在 MacOSX 上 Perl 已經預設安裝好了,不需要另外安裝。
不過如果需要安裝 Perl 模組的話,必須安裝 OSX 安裝光碟中隨附的 developer 套件 xcode(只需安裝 'unix dev tools')。
▲ 圖2:安裝 Perl 於 MacOS 上
只能用 cpan 安裝 App::cpanminus 模組。請於命令列模式下,輸入下列指令:
> cpan App::cpanminus
在 Unix-like 系統上,則有許多不同的安裝方式:
請於命令列模式下,輸入下列指令:
$ cpan App::cpanminus
下載最新版的 cpanminus,並用它來安裝到系統路徑。
請於命令列模式下,輸入下列指令:
$ curl -L https://cpanmin.us | perl - --sudo App::cpanminus
如果您在個人目錄使用 perlbrew ( https://www.perlbrew.pl/ ) 安裝了自己的 perl,您就不需要「--sudo」了。
請於命令列模式下,輸入下列指令:
$ curl -L https://cpanmin.us | perl - App::cpanminus
下載後即可使用。請於命令列模式下,輸入下列指令:
$ curl -LO https://xrl.us/cpanm && chmod +x cpanm
請於命令列模式下,輸入下列指令:
$ cpanm 模組名稱
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpanm -S 模組名稱
一般來說 cpanm
會幫您安裝好您所指定的模組,以及所有相依模組。但若您只想安裝相依模組,而不安裝指定模組本身的話,您可以這樣做。
請於命令列模式下,輸入下列指令:
$ cpanm --installdeps 模組名稱
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpanm -S --installdeps 模組名稱
若您有特定需求,希望將此模組及其相依模組安裝到特定位置的話,可以用這個指令。
請於命令列模式下,輸入下列指令:
$ cpanm -L ~/another/lib/ https://example.com/path/[模組檔案名稱].tar.gz
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpanm -S -L ~/another/lib/ https://example.com/path/[模組檔案名稱].tar.gz
若您沒有網路時,您可以直接安裝預先下載好的模組壓縮檔。
請於命令列模式下,輸入下列指令:
$ cpanm ~/tarball/[模組檔案名稱].tar.gz
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpanm -S ~/tarball/[模組檔案名稱].tar.gz
若您在某個資料夾中開發自己的模組,可以直接從資料夾裡安裝。
請於命令列模式下,輸入下列指令:
$ cpanm ./path/[模組目錄名稱]
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpanm -S ./path/[模組目錄名稱]
有句經典名言是這麼說的:「無論多完美的軟體,在其所有的程式碼中,一定至少有一個 Bug,以及至少一行可以被精簡的程式碼」。當您想更新 cpanminus
以取得修正過的新版本,您可以這樣做。
請於命令列模式下,輸入下列指令:
$ cpanm --self-upgrade
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpanm -S --self-upgrade
時光飛逝,人總會成長,Perl 模組也一樣。若您想找出哪些模組已經有新版本(BugFix 或新功能),您可以安裝 App::cpanoutdated。
請於命令列模式下,輸入下列指令:
$ cpanm App::cpanoutdated
請於命令列模式下,輸入下列指令:
$ cpan-outdated
甚至可以結合 cpanminus 做自動更新!
a. 使用 perlbrew,或使用之帳號擁有系統寫入權限時
請於命令列模式下,輸入下列指令:
$ cpan-outdated | cpanm
b. 非使用 perlbrew 且使用之帳號沒有系統寫入權限時
若您不是使用 perlbrew
且帳號沒有系統寫入權限時,則需要加上 "-S" (sudo) 參數。
請於命令列模式下,輸入下列指令:
$ cpan-outdated | cpanm -S
時間總會在人的臉上留下痕跡,對於 Perl 模組來說也一樣。世界瞬息萬變,幸運的是,您可以清楚知道 Perl 模組每一個版本的成長中,到底改變了些什麼。
若您想瞭解每一個 Perl 模組的 Changelog,您可以安裝 cpan-listchanges。
請於命令列模式下,輸入下列指令:
$ cpanm cpan-listchanges
請於命令列模式下,輸入下列指令:
$ cpan-listchanges 模組名稱
若不知道最新版本號,可以用「HEAD」表示。
請於命令列模式下,輸入下列指令:
$ cpan-listchanges 模組名稱@舊版本號..新版本號
例如:
$ cpan-listchanges My::
This e-mail address is being protected from spambots. You need JavaScript enabled to view it
請於命令列模式下,輸入下列指令:
$ cpan-listchanges --all 模組名稱
可以跟 cpan-outdated 結合,列出所有需要更新的 Perl 模組的變動。
請於命令列模式下,輸入下列指令:
$ cpan-outdated -p | xargs cpan-listchanges
人都有不堪的過去,而且往往難以抹去。但如果您是想把從前裝錯或是不想要的模組抹去,那倒是可行的。
若想要移除 Perl 模組,您可以安裝 App::pmuninstall。
請於命令列模式下,輸入下列指令:
$ cpanm App::pmuninstall
需要移除模組時,請於命令列模式下,輸入下列指令:
$ pm-uninstall 模組名稱
例如:
$ pm-uninstall App::pmuninstall
請於命令列模式下,加上參數 "-f",並輸入下列指令:
$ pm-uninstall -f 模組名稱
請於命令列模式下,加上參數 "-n",並輸入下列指令:
$ pm-uninstall -n 模組名稱
學會 Perl,行遍全球。CPAN 十多年來累積了蘊藏量極為豐富的套件庫,甚至可以因應各種不同需求而直接引入或橋接其他語言,各種想得到與想不到的模組都已經被撰寫完成,便於直接使用。面對如此大量的模組庫藏,有時難免感到眼花撩亂,但只要善用 CPAN 網站上的評分系統與 RT(錯誤追蹤系統 https://rt.cpan.org)資訊,通常就能協助您找到合適的模組,大幅減輕您的開發壓力,縮短開發時間,並提昇寫作品質。