perl有自帶的模塊,還有第三方模塊。自帶的模塊是隨perl安裝而安裝好的,第三方模塊須要從CPAN(Comprehensive Perl Archive Network)上下載並安裝,能夠從https://metacpan.org中查找所需第三方模塊。正則表達式
能夠藉助perldoc 'MODULE_NAME'
來間接查詢一個模塊是否已安裝,若是安裝了就能正常輸出對應的文檔,若是沒有安裝,則報錯。redis
若是想要查看全部已安裝的module,則使用cpan -a
,不過第一次使用它會要求你先進行一番配置,不過通常來講,選擇讓它自動配置便可。shell
例如,篩選出已安裝的包含CGI字符的模塊。第一個字段是字段名,第二個字段是已安裝版本號,第三個字段是可獲取的最新版本號,第四個字段是在CPAN中的位置,這個位置,稍後解釋。json
[root@redisa-b ~]# cpan -a | grep CGI CGI 3.63 4.40 LEEJO/CGI-4.40.tar.gz CGI::Fast 1.09 2.13 LEEJO/CGI-Fast-2.13.tar.gz FCGI 0.74 0.78 ETHER/FCGI-0.78.tar.gz CGI::Carp 3.51 4.40 LEEJO/CGI-4.40.tar.gz CGI::Cookie 1.30 4.40 LEEJO/CGI-4.40.tar.gz CGI::Pretty 3.46 4.40 LEEJO/CGI-4.40.tar.gz CGI::Push 1.05 4.40 LEEJO/CGI-4.40.tar.gz CGI::Util 3.62 4.40 LEEJO/CGI-4.40.tar.gz
全面瞭解推薦內容:數組
模塊實際上都是perl腳本。在perl文化中,很是注重模塊的開發人員以及維護人員。在每一個模塊相關的元數據屬性中,都會記錄他們的信息。bash
如下是一個模塊基本具有的信息:app
Module id = File::Utils CPAN_USERID PEKINGSAM (Yan Xueqing <yanxueqing10@163.com>) CPAN_VERSION 0.000005 CPAN_FILE P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz UPLOAD_DATE 2016-05-11 MANPAGE File::Utils - Provide various of file operation INST_FILE /usr/local/share/perl5/File/Utils.pm INST_VERSION 0.0.5
File::Utils
Distribution id
。這個ID由4部分組成:
man File::Utils
獲取該模塊的幫助信息not installed
經過Distribution id,能夠直接推斷出這個文件的URL。例如,以阿里雲的CPAN源鏡像(http://mirrors.aliyun.com/CPAN/
)爲例,那麼這個模塊包的URL爲:http://mirrors.aliyun.com/CPAN/authors/id/P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz
。ide
有些工具須要咱們指定Distribution id,4個部分畢竟比較複雜,其實能夠指定後兩個部分,通常來講能夠自動補齊前兩部分。工具
另外,CPAN安裝模塊時,依賴於make工具,因此必須先安裝好make。更簡易安裝好整個開發包。ui
yum -y install make
例如,網上搜索到了Data::Dumper
模塊,想要手動安裝它。
從網上下載好模塊源碼包,而後解壓,進入源碼包目錄:
wget https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Data-Dumper-2.172.tar.gz tar xf Data-Dumper-2.172.tar.gz cd Data-Dumper-2.172/
而後看看這個目錄下,存在的文件是Makefile.PL仍是Build.PL,這兩種文件均可以用來編譯安裝,若是同時存在,則隨便選擇一種便可。
[root@redisa-b Data-Dumper-2.172]# ls -l total 336 -rw-r--r-- 1 privoxy privoxy 11559 Sep 19 22:36 Changes -rw-r--r-- 1 privoxy privoxy 45832 Sep 19 22:36 Dumper.pm -rw-r--r-- 1 privoxy privoxy 51342 Sep 19 22:36 Dumper.xs -rw-r--r-- 1 privoxy privoxy 1583 Sep 19 22:36 Makefile.PL -rw-r--r-- 1 privoxy privoxy 618 Sep 19 22:36 MANIFEST -rw-r--r-- 1 privoxy privoxy 418 Sep 19 22:36 MANIFEST.SKIP -rw-r--r-- 1 privoxy privoxy 863 Sep 19 22:36 META.json -rw-r--r-- 1 privoxy privoxy 548 Sep 19 22:36 META.yml -rw-r--r-- 1 privoxy privoxy 200069 Sep 19 22:36 ppport.h drwxr-xr-x 3 privoxy privoxy 4096 Sep 19 22:36 t -rw-r--r-- 1 privoxy privoxy 768 Sep 19 22:36 Todo
上面的是Makefile.PL,因此安裝:
perl Makefile.PL make make install
若是想要指定安裝路徑,則加上INSTALL_BASE
便可:
perl Makefile.PL INSTALL_BASE=/home/perlapps
若是是Build.PL,則:
perl Build.PL ./Build ./Build install
若是想要指定安裝路徑,則加上perl Build.PL −−install_base /home/perlapps
若是是手動指定的安裝路徑,還須要設置模塊查找路徑環境變量:
export PERL5LIB=/home/perlapps
或者在perl程序內部,指定查找路徑:
#!/usr/bin/perl use lib qw(/home/perlapps);
手動編譯安裝時,極可能會由於額外的庫依賴問題而致使編譯中斷。通常來講,對於提示缺乏的庫文件名$foo
來講,Debian/Ubuntu上對應的庫文件包是lib$foo-dev
或$foo-dev
,redhat系列上則是lib$foo-devel
,使用包管理工具大體搜索一下便可。
手動安裝模塊畢竟不方便。perl自身的CPAN模塊提供的shell可讓咱們快速安裝模塊。
perl -MCPAN -e "shell"
它將會進入cpan的交互式shell模式。在這個交互式模式下,能夠執行不少操做。例如安裝模塊、下載模塊、按照正則查找模塊、查找某個做者的模塊、升級模塊、列出最近上傳到CPAN的模塊等等。
cpan下能執行的命令,能夠經過h鍵來獲取幫助:
cpan[8]> h Display Information (ver 1.9800) command argument description a,b,d,m WORD or /REGEXP/ about authors, bundles, distributions, modules i WORD or /REGEXP/ about any of the above ls AUTHOR or GLOB about files in the author's directory (with WORD being a module, bundle or author name or a distribution name of the form AUTHOR/DISTRIBUTION) Download, Test, Make, Install... get download clean make clean make make (implies get) look open subshell in dist directory test make test (implies make) readme display these README files install make install (implies test) perldoc display POD documentation Upgrade r WORDs or /REGEXP/ or NONE report updates for some/matching/all modules upgrade WORDs or /REGEXP/ or NONE upgrade some/matching/all modules Pragmas force CMD try hard to do command fforce CMD try harder notest CMD skip testing Other h,? display this menu ! perl-code eval a perl command o conf [opt] set and query options q quit the cpan shell reload cpan load CPAN.pm again reload index load newer indices autobundle Snapshot recent latest CPAN uploads
例如,經過m命令或者i命令按正則表達式查找包含"File::Util"字符的模塊:
cpan[11]> m /^File::Util*/ Module < File::Util (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Cookbook (TOMMY/File-Util-4.132140.tar.gz) Module < File::Util::Definitions (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Exception (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Exception::Diagnostic (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Exception::Standard (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Interface::Classic (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Interface::Modern (TOMMY/File-Util-4.161950.tar.gz) Module < File::Util::Manual (TOMMY/File-Util-4.132140.tar.gz) Module < File::Util::Manual::Examples (TOMMY/File-Util-4.132140.tar.gz) Module < File::Util::Tempdir (PERLANCAR/File-Util-Tempdir-0.030.tar.gz) Module < File::Utils (PEKINGSAM/File-Utils-0.0.5.tar.gz)
這裏列出來的模塊版本可能會比CPAN網頁上列出的版本更低一些。
使用過程當中,按鍵可能會很是很差用。若是須要刪除某個已鍵入的字符,須要同時按住ctrl+back按鍵。
例如,安裝File::Util
模塊:
cpan[12]> install File::Utils
還能夠安裝網上下載的perl模塊源碼包,甚至get命令能夠直接下載源碼包。例如,安裝File::Rename
模塊,它的源碼包地址爲https://cpan.metacpan.org/authors/id/R/RM/RMBARKER/File-Rename-1.09_02.tar.gz
cpan[8]> get RMBARKER/File-Rename-1.09_02.tar.gz
下載成功後,它會提示保存的路徑:
Checksum for /root/.cpan/sources/authors/id/R/RM/RMBARKER/File-Rename-1.09_02.tar.gz ok
而後用install命令安裝這個模塊源碼包便可:
cpan[9]> install RMBARKER/File-Rename-1.09_02.tar.gz
這裏的distribution id既能夠加上前兩部分,也能夠省略前兩部分。
默認安裝一個模塊時須要make test
,可是有些模塊須要test很是常的時間,好比安裝CPANPLUS模塊時的依賴模塊File::Fetch
,它有可能會test很是長的時間,這時候能夠CTRL+C退出,再次安裝時跳過test階段。
cpan[10]> notest install CPANPLUS
若是想要配置CPAN,須要使用o conf
,這個命令很關鍵,關於配置的信息很是多,此處只介紹下修改CPAN源的方法。例如修改CPAN的源爲阿里雲的源:
# 1.指定aliyun的CPAN o conf urllist push https://mirrors.aliyun.com/CPAN/ # 2.提交,寫入到磁盤配置文件 o conf commit # 3.查看當前的CPAN源 o conf urllist
關於cpan交互式,以及o conf
以及CPAN模塊的配置文件,能夠man CPAN
獲取更多用法。
另外注意,在perl程序代碼中,能夠經過CPAN::Shell->COMMAND("arguments");實現和交互式模式下同樣的操做:
例如,在perl程序代碼中安裝模塊:
#!/usr/bin/perl use CPAN; CPAN::Shell->install("Acme::Meta"); CPAN::Shell->install("NWCLARK/Acme-Meta-0.02.tar.gz");
cpan命令是隨perl一塊兒安裝的一個perl腳本,它讓咱們從cpan那噁心的交互式中解脫出來。但它內部實現的功能主要仍是調用CPAN.pm,和cpan交互式是同樣的。
大概看幾個cpan腳本的經常使用選項:
-a:建立CPAN.pm的autobundle -D module:查看模塊的詳細屬性信息。例如是否安裝,安裝的版本號,最新的版本號,對應的模塊路徑,對應的源碼包文件路徑,誰維護的 -g module:下載最新版本的模塊到當前目錄 -i module:安裝指定的模塊 -j Config.pm:指定CPAN配置數據的文件 -J:以CPAN.pm相同的格式dump當前的配置文件 -O:列出過時的模塊 -v:輸出cpan腳本的版本號以及CPAN.pm的版本號
例如,安裝File::Util::Manual
模塊,很簡單了。
cpan -i File::Util::Manual
查看模塊的信息:
[root@redisa-b ~]# cpan -D File::Utils Reading '/root/.cpan/Metadata' Database was generated on Wed, 19 Sep 2018 20:17:03 GMT File::Utils ------------------------------------------------------------------------- (no description) P/PE/PEKINGSAM/File-Utils-0.0.5.tar.gz # 模塊的distribution id /usr/local/share/perl5/File/Utils.pm # 模塊的安裝路徑 Installed: 0.0.5 # 已安裝的模塊版本號 CPAN: 0.000005 up to date # CPAN中最新的模塊版本號 Yan Xueqing (PEKINGSAM) # 做者名稱及CPAN中的ID yanxueqing10@163.com
cpan -J
對於瞭解和修改CPAN模塊配置文件很是有幫助,能夠執行一下試試看。
CPANPLUS提供了和CPAN.pm相似的功能,但特性更豐富。
首先,安裝它:
cpan[20]> notest install CPANPLUS
cpanp命令能夠進入交互式,也可使用命令行模式,命令行模式功能也很豐富。不過用法都很簡單,和cpan都相似,能夠cpanp -h
大體看一下。
例如,安裝MongoDB模塊:
cpanp -i MongoDB
卸載MongoDB模塊:
cpanp -u MongoDB
這個是真正的徹底一鍵安裝,無需任何配置。並且,它沒有交互式模式。
首先,安裝這個工具所在cpanminus模塊。:
install App::cpanminus
選項和用法很簡單,能夠cpanm -h
去瞧一瞧。
要安裝某個模塊:
cpanm File::Utils
默認狀況下,它搜索的CPAN源是http://www.cpan.org/
,能夠指定CPAN源:
cpanm --mirrors http://mirrors.aliyun.com/CPAN File::Utils
要卸載一個模塊,能夠安裝pmuninstall模塊,它提供pm-uninstall命令,能夠快速卸載模塊。
cpan App::pmuninstall
例如,卸載MongoDB模塊:
pm-uninstall MongoDB
默認會給出提示,是否要確認卸載。能夠指定"-f"選項強制卸載,無需交互式提示:
pm-uninstall -f MongoDB
固然,除了pm-uninstall,cpan、cpanp、cpanm都帶有卸載的功能。
默認狀況下,安裝的第三方模塊都會和perl放在一塊兒,並且對於那些非root用戶,對某些目錄沒有寫入權限,致使安裝失敗,只能sudo。可使用local::lib
,自定義安裝路徑。
首先,安裝這個模塊:
cpan[9]> install local::lib
而後回到bash,能夠查看這個模塊導出的環境變量:
$ perl -Mlocal::lib PATH="/home/fairy/perl5/bin${PATH:+:${PATH}}"; export PATH; PERL5LIB="/home/fairy/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB; PERL_LOCAL_LIB_ROOT="/home/fairy/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT; PERL_MB_OPT="--install_base \"/home/fairy/perl5\""; export PERL_MB_OPT; PERL_MM_OPT="INSTALL_BASE=/home/fairy/perl5"; export PERL_MM_OPT;
local::lib
正是藉助於修改某些環境變量(注意其中的PERL5LIB)讓它們脫離perl內置路徑@INC
,從而影響CPAN客戶端安裝的目錄路徑。
而後使用cpan客戶端的-I
開關,就表示根據local::lib
的配置來安裝(注:有些cpan客戶端沒有-I選項)。
cpan -I Text::Levenshtein
若是使用cpanm,它比較聰明一點,若是你已經設置了local::lib
,它會直接按照設定安裝,若是沒有設定,它會檢查對默認的安裝目錄是否具備寫權限,若是沒有,就自動設置local::lib
模塊。因此,cpanm無需設置local::lib
,但仍然能夠顯式指明使用local::lib
來安裝:
cpanm --local-lib HTML::Parser
若是仍然使用cpan客戶端,指定安裝路徑。能夠修改兩個參數:
cpan[1]> o conf makepl_arg INSTALL_BASE=/home/fairy/perl5 cpan[2]> o conf mbuild_arg "--install_base /home/fairy/perl5" cpan[3]> o conf commit
能夠從man CPAN
中獲取這兩個參數的解釋:分別是傳遞給perl Makefile.PL
和./Build
的參數。也就是說,經過設置這兩個參數,不管是makefile格式的安裝,仍是build格式的安裝,都會安裝到給定目錄下。
當咱們第一次進入CPAN shell的時候,會讓咱們配置CPAN,咱們能夠選擇讓它自動配置。自動配置後,它會提示配置文件保存到了哪裏。
咱們也能夠在cpan交互式中使用mkmyconfig從新生成屬於當前用戶的配置文件,它會保存到~/.cpan/CPAN/MyConfig.pm
,同時還會將local::lib
的一些相關環境變量追加到~/.bashrc
中。
進入cpan交互式shell,鍵入o conf
便可輸出當前的配置。內容項不少,有幾項是建議修改的:
1.修改CPAN的源爲阿里雲的源
# 1.指定aliyun的CPAN o conf urllist push https://mirrors.aliyun.com/CPAN/ # 2.提交,寫入到磁盤配置文件 o conf commit # 3.查看當前的CPAN源 o conf urllist
上面的push命令是將aliyun的CPAN源推到urllist的數組最後一個位置(key是urllist,value是一個由url組成的數組),還可使用pop移除數組最後一個元素,使用shift移除數組第一個元素,使用unshift推到數組的第一個元素。若是不給這幾個命令,直接給url,則替換整個數組。
若是想清空urllist,可使用o conf init urllist
。
2.修改make和build的執行方式,加上sudo。這主要是針對非root用戶的
o conf make_install_make_command 'sudo /usr/bin/make' o conf mbuild_install_build_command 'sudo ./Build'
3.指定安裝路徑。這主要是針對非root用戶的
cpan[1]> o conf makepl_arg INSTALL_BASE=/home/fairy/perl5 cpan[2]> o conf mbuild_arg "--install_base /home/fairy/perl5"
4.配置自動提交
o conf auto_commit 1
5.配置依賴策略
o conf prerequisites_policy follow
除了上面幾項,使用cpan時,還建議更新和安裝如下幾個模塊:
install CPAN ExtUtils::MakeMaker Module::Build Bundle::CPAN
安裝這幾個模塊能夠解決不少沒必要要的麻煩。