Perl 學習筆記

轉載自:扶凱[http://www.php-oa.com]

perl 學習書籍推薦

1. <<Learning Perl>>
小名叫 <<Perl語言入門>> perl 入門必讀,就象別人講的一週必讀perl入門

2. <<Programming Perl>>
這個的中文小名叫 <<Perl語言編程>> 這本是進階,一週後就得多讀讀這個了

3. <<Advanced Perl Programming>>
這是買也買不到的書啊。。<<高級Perl編程>> 這個書好象絕版了,但是個不錯的書,可以到 taobao 上找個複印的

以上三本是 Perl 從一個新手到進階到高手一直會要看的。

4. <<Perl Cookbook>>
perl在各種場景中的應用案例集合,中文的只有臺灣有,誰有興趣和我一起到國外團一本回來。很不錯的書。
5. <<Network Programming with Perl>>
<<Perl網絡編程>> 只要不是寫 web ,這本書必讀,可以對很多 Linux 相關的東西瞭解深多了
6. <<Perl Best Practices>>
<<perl最佳實踐>> 對寫程序的風格之類進行提升的,如果照這個寫出來的程序,不會被人講可讀性不好的。
7.<<Automating System Administration with Perl>>
<<使用Perl實現系統管理自動化>> 系統管理的必備書。中文的還要過三個月的樣子纔會有(注,現在2011.1.23 )
 

Perl 的網站(有人認爲 Perl 不能做網站,記錄一下)

用Mason開發的網站之一:passport.maxthon.cn 每日訪問量千萬級別

 

好用的模塊

Number::Bytes::Human # 轉換字節之類到人類比較可讀的大小
Smart::Comments # 非常方便的做 debug 和進度條打印的工具
Class::Accessor::Fast # 轉換類的屬性變成方法,可以方便的操作
Memoize # 給函數做 Cache 的,如果函數的返回值非常多變,可以使用這個模塊加快速度
Number::Bytes::Human # 給字節轉換成人類可讀
Web::Scraper # 最好的網頁分析模塊了,使用的 XPath
List::Util # 最好的列表操作,大部分是由 c 寫的。性能非常好。
# 常用導出的子函數有 max,maxstr,sum,reduce(列表歸併),first(判斷元素匹配)
List::MoreUtils # 和上面一樣,加了幾個其它的功能,
# 常用導出的子函數有 any,all,none notall,pairwise(同步二個列表操作),eacg_array(同時操作三個以上列表),mesh(數組合並)

 

Perl的圖形界面程序(Gtk2,TK)

gmusicbrowser mp3播放器
PAC Manager 替換 SecureCRT/Putty 的終端,界面還需要完善
ploader 一個相冊管理和上傳軟件

 

Perl 的線程函數

Perl線程管理
threads->create() # 創建子進程,第一個參數是子函數,第二個參數是傳給子函數的參數
threads->join; # 等子線程結束,取得子線程的返回值.
threads->is_joinable; # 配合上面用,看看子線程是否運行完了.
threads->detach; # 分離子線程,這樣父進程不在對這個子進程有責任了,當然也不能 join 了。
threads->tid(); # 取得當前線程的線程 ID,和進程一樣也有 ID ,用來標識每個線程.
lock($variable) # 鎖定一個標量,數組,hash.這個鎖定會直到鎖定他的線程超出範圍。
Perl線程信號
cond_wait($variable) # 在這個$variable 上等待
cond_signal($variable) # 給這個變量發一個信號
# 讓在這個變量(指使用了 cond_wait 的線程)上等待的線程啓動,多個進程只會有一個啓動。
cond_broadcast($variable)
# 和上面一樣,但會喚醒所人有線程。每個線程都會接着運行 cond_wait() 之後的代碼。

 

Perl 中模塊的安裝方法

其它所有方法都是過時的,請使用 CPANM 來安裝:
使用CPANMinus 來安裝Perl 模塊

Perl 模塊相關使用

查看模塊文檔 perldoc :

$ perldoc Module::Name

查看模塊是否安裝(簡單命令版本):

$ perl -MModule::Name -e 0

查看機器上都安裝了哪些模塊:

$ perl -MExtUtils::Installed -le 'print foreach ExtUtils::Installed->new->modules'

看 Perl 內置安裝了哪些模塊:

perl -MModule::CoreList -le 'print foreach Module::CoreList::find_modules'

查看 Perl 模塊安裝的位置(單行命令簡單版本)

$ perldoc -l module_name
$ perl -Mmodule_name -e'print $_ . " => " . $INC{$_} . "\n" for keys %INC'

如何才能知道自己裝了哪些 PERL 的模塊(單行命令簡單版本)?

$ find `perl -e 'print "@INC"'` -name '*.pm' -print

查詢當前使用的模塊的版本

$ perl -Mmodule_naem -e 'print $module_name::VERSION;'

查詢模塊是否安裝,和安裝的位置

$ perldoc -lm module_name

 

給Perl打包成一個執行文件的方法

(1.安裝使用 PAR::Packer
# cpanm PAR::Packer
# 使用下面的命令就可以打包了
pp -c -o Get Get.pl
 
#啓動過濾器,來保護自己的 perl 程序
$pp -f Bleach -o hello hello.pl
或者
$pp -f Bytecode -o hello hello.pl
 
#打包成.par
#不包含核心模塊:
$pp -p -o script.par script.pl
#包含核心模塊:
$pp -B -p -o script.par script.pl

Bleach過濾器是PAR自己實現的,而Bytecode這種過濾方式是Perl的標準格式(需要Perl 5.8.1以上版本支持)

(2 出了問題,怎麼查

$ scandeps.pl -V -e 'use YAML;'

可以查出所有的包的依關係

 

(3 Floating point exception

大多是因爲 GCC 的版本不一樣,建議相同的操作系統和位數

 

命名規範

常量: 大寫
類名: 開頭大寫
內部特殊子例程: 大寫
內部特殊變量: 大寫
普通變量: 小寫
普通子例程: 小寫

perl命令行接口

# perl -nale
 
-0 給記錄符分隔符($/)指定爲一個八進制.
-a 打開自動分割模式(和-n ,-p 一起纔有效).
-e 輸入多行,使用後不在從參數列表尋找等程序的文件名
-n 讓你的腳本 周圍圍繞循環,也就是講給腳本中的line當作一個循環體

Perl的特殊符號

趣味符
$ 標量
@ 數組[給值時使用=>,記得不要和引用時的->混了]
% 散列{hash}
& 子例程,子函數
* typeglob
$x{} x名字前面是美元符號($),後面是花括號({}),則其爲 hash 元素
$! 系統產生的一些可讀的信息,也可能是出錯的信息
$_ 子函數參數變量自己本身
<> 數據輸入.如果沒有指定文件名,則其從標準輸入流中自動打開和關閉一系列文件進行讀入

erl默認的內部變量

$- 當前頁可打印的行數,屬於Perl格式系統的一部分
$! 根據上下文內容返回錯誤號或者錯誤串
$” 列表分隔符
$# 打印數字時默認的數字輸出格式
$$ Perl解釋器的進程ID
$% 當前輸出通道的當前頁號
$& 與上個格式匹配的字符串
$( 當前進程的組ID
$) 當前進程的有效組ID
$* 設置1表示處理多行格式.現在多以/s和/m修飾符取代之.
$, 當前輸出字段分隔符
$. 上次閱讀的文件的當前輸入行號
$/ 當前輸入記錄分隔符,默認情況是新行
$: 字符設置,此後的字符串將被分開,以填充連續的字段.
$; 在仿真多維數組時使用的分隔符.
$? 返回上一個外部命令的狀態
$@ Perl解釋器從eval語句返回的錯誤消息
$[ 數組中第一個元素的索引號
$\ 當前輸出記錄的分隔符
$] Perl解釋器的子版本號
$^ 當前通道最上面的頁面輸出格式名字
$^A 打印前用於保存格式化數據的變量
$^D調試標誌的值
$^E在非UNIX環境中的操作系統擴展錯誤信息
$^F最大的文件捆述符數值
$^H由編譯器激活的語法檢查狀態
$^I內置控制編輯器的值
$^L發送到輸出通道的走紙換頁符
$^M備用內存池的大小
$^O操作系統名
$^P指定當前調試值的內部變量
$^R正則表達式塊的上次求值結果
$^S當前解釋器狀態
$^T從新世紀開始算起,腳步本以秒計算的開始運行的時間
$^W警告開關的當前值
$^X Perl二進制可執行代碼的名字
$_ 默認的輸入/輸出和格式匹配空間
$| 控制對當前選擇的輸出文件句柄的緩衝
$~ 當前報告格式的名字
$` 在上個格式匹配信息前的字符串
$’ 在上個格式匹配信息後的字符串
$+ 與上個正則表達式搜索格式匹配的最後一個括號
$< 當前執行解釋器的用戶的真實ID
$<digits>含有與上個匹配正則表達式對應括號結果
$= 當前頁面可打印行的數目
$> 當前進程的有效用戶ID
包含正在執行的腳本的文件名
$ ARGV 從默認的文件句柄中讀取時的當前文件名
%ENV 環境變量列表
%INC 通過do或require包含的文件列表
%SIG 信號列表及其處理方式
@_ 傳給子程序的參數列表
@ARGV 傳給腳本的命令行參數列表
@INC 在導入模塊時需要搜索的目錄列表

q 相當一個單引號,quote的縮寫
qq 相當一個雙引號,quote quote的縮寫
qr 正規表達式.quote regex的縮寫
qw 單詞表,quote word的縮寫,qw($opt_h $opt_v)
qx 執行外部程序,相當反引號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章