- Perl的模塊包括兩種:一種是隨Perl發(fā)行版本一同打包的,另一種則需要從CPAN下載,然后安裝。(訪問https://metacpan.org/)安裝模塊的方法就是從網(wǎng)上下載壓縮包,解壓縮后在shell中執(zhí)行一些命令党涕,具體命令取決于模塊所支持的安裝方式。
一種是使用模塊MakeMaker(ExtUtils::MakeMaker):
perl Makefile.PL
make install
perl Makefile.PL
還有一個(gè)可選參數(shù)PREFIX=/usr/...
用來(lái)指定安裝目錄
另一種安裝方式是使用模塊Module::Build:
perl Build.PL
./Build install
還有一種方式支持自動(dòng)安裝依賴模塊巡社,那就是使用Perl自帶的CPAN.pm(pm表示Perl Module膛堤,表示Perl自帶的模塊,以區(qū)分第三方模塊):
perl -MCPAN -e shell
install 模塊名
最近還有一種方式是使用cpanminus晌该,首先需要安裝cpanminus肥荔,然后在命令行執(zhí)行
cpanm 模塊名
- 這里介紹幾種Perl模塊
File::Basename:作用是從文件的全名(包含了路徑信息)中取出真正的文件名,使用Perl模塊的第一步是查看模塊的文檔perldoc File::Basename
朝群,在程序中使用模塊燕耿,只需要聲明use File::Basename
,然后就可以使用模塊提供的函數(shù)
demo11-1
#!/usr/bin/perl
use File::Basename
chomp($fullname = `pwd`);
$dirname = dirname $fullname;
$basename = basename $fullname;
print "Current directory:$dirname Filename:$basename\n";
./demo11-1
Current directory:/home/zhujingjie/workspace/LearningPerl Filename:ch11
但如果程序中已經(jīng)定義了同名的子程序姜胖,則直接使用模塊可能導(dǎo)致沖突誉帅,這時(shí)可以使用“導(dǎo)入列表”(import list)use File::Basename qw/dirname, basename/
跟在模塊名后面的列表指定了需要導(dǎo)入的函數(shù)名稱,如果沒有顯式的指定導(dǎo)入列表,則會(huì)使用模塊默認(rèn)的導(dǎo)入列表(模塊的默認(rèn)導(dǎo)入列表也不一定會(huì)導(dǎo)入模塊內(nèi)的所有函數(shù))蚜锨。當(dāng)導(dǎo)入列表為空時(shí)use File::Basename ()
則不會(huì)導(dǎo)入函數(shù)档插。導(dǎo)入函數(shù)的目的是使用簡(jiǎn)短的名稱來(lái)使用函數(shù),所以對(duì)于沒有導(dǎo)入的函數(shù)踏志,依然可以通過全名來(lái)使用模塊提供函數(shù)阀捅。
demo11-2
:
#!/usr/bin/perl
use File::Basename (dirname);
chomp($fullname = `pwd`);
$dirname = dirname $fullname;
$basename = File::Basename::basename $fullname;
print "Current directory:$dirname Filename:$basename\n";
即使沒有導(dǎo)入basename
函數(shù)胀瞪,也可以通過File::Basename:basename
來(lái)使用
./demo11-2
Current directory:/home/zhujingjie/workspace/LearningPerl Filename:ch11
-
File::Spec是一個(gè)面向?qū)ο驩O的模塊针余,它提供的是方法而不是函數(shù),使用面向?qū)ο竽K有一點(diǎn)不同凄诞,首先不需要導(dǎo)入列表圆雁,因?yàn)樗惶峁┖瘮?shù)也不會(huì)導(dǎo)入任何函數(shù)。其次帆谍,使用模塊提供的方法需要全名
File::Spec->catfile()
然后用瘦箭頭->
指定方法名伪朽。
使用File::Spec提供的catfile將文件夾和文件名組成文件標(biāo)識(shí)符:
demo11-3
:
#!/usr/bin/perl
use File::Spec;
if(@ARGV != 2){
die "Usage:./demo11-3 <old_filename> <new_filename>";
}
chomp($dir = `pwd`);
$old_name = File::Spec->catfile($dir,$ARGV[0]);
$new_name = File::Spec->catfile($dir,$ARGV[1]);
rename($old_name, $new_name)
or warn "Can't rename '$old_name' to '$new_name':$!\n";
這個(gè)程序可以重命名當(dāng)前路徑下的文件
- Perl最廣泛的用途就是充當(dāng)CGI,CGI.pm模塊可以完成大部分功能汛蝙,CGI.pm同時(shí)提供函數(shù)接口和面向?qū)ο蠼涌凇?br>
demo11-4
:
#!/usr/bin/perl
use CGI qw(:all);
print header("text/plain");
foreach my $param ( param() ){
print "$param: ". param($param). "\n";
}
start_html()
可以生產(chǎn)HTML文檔開頭的部分烈涮,h1()
可以輸出h1標(biāo)記內(nèi)的內(nèi)容
demo11-5
:
#!/usr/bin/perl
use CGI qw(:all);
print header()
start_html("This is the page title"),
h1( "Input parameters");
my $list_items;
foreach my $param ( param() ){
$list_items .= li("$param:" . param($param) );
}
print ul($list_items);
print end_html();
- DBI數(shù)據(jù)庫(kù)接口(https://dbi.perl.org/)沒有內(nèi)置于Perl發(fā)行版中,但如果程序需要連接數(shù)據(jù)庫(kù)窖剑,那就必不可少坚洽。DBI隔離了不同數(shù)據(jù)庫(kù)的差異,它同時(shí)也是一個(gè)面向?qū)ο驩O的模塊西土。安裝完DBI之后讶舰,還需要安裝DBD(Database Driver)程序才能連接數(shù)據(jù)庫(kù)。
想要連接數(shù)據(jù)庫(kù)需了,需要先use DBI;
然后調(diào)用DBI的connect()
方法:
use DBI;
$dbh = DBI->connect($data_source, $username, $password);
$data_source
制定了要鏈接的數(shù)據(jù)庫(kù)信息以及要使用的DBD跳昼,比如對(duì)PostgreSQL就是DBD::Pg
:
my $data_source = "dbi:Pg:dbname=name_of_database";
連上數(shù)據(jù)庫(kù)以后,就可以開始準(zhǔn)備查詢肋乍,執(zhí)行查詢以及讀取查詢結(jié)果等操作:
$sth = $dbh->prepare("SQL Statement...");
$sth->execute();
@row_ary = $sth->fetchrow_array;
$sth->finish;
完成工作后鹅颊,斷開與數(shù)據(jù)庫(kù)的連接:
$dbh->disconnect();