標籤:
第一次接觸Perl,還是2008年10月份的時候,當時因為項目重構,需要進行大量的文本操作,於是便拾起了以“文本操作為己任”的Perl語言。當然,帶我入門的還是那本赫赫有名的The Llama Book, 即<Learning Perl> 第四版。
然而,由於主要是為了使用,所以只是快餐式的學習,並沒有系統的去瞭解Perl,這幾年來三三兩兩的也寫了不少Perl指令碼,但是對於Perl那些天書式的符號,還是頗有些頭疼,經常,寫到一半就得停下來去查一下某個奇怪的文法,或者奇特的符號,很是打斷思路。社區對Perl有兩種比較中肯的評價:一是Perl是Write-Only的程式設計語言;二是Perl學起來難,但一旦學會了,用起來就相當方便。 我想這兩點其實都是基於一個事實,就是Perl裡有太多奇怪的符號,而只有你對這些符號瞭若指掌了,你才能發揮Perl的最大效率 --- 所以,學習Perl就要像學習曆史課本一樣,靠的,就是背誦!
根據這兩年的經驗,整理了一下自己覺得用的比較多的一些符號,用法,以及函數,庫之類的,這些都是很基本的,但是“背熟”了,對提高效率會很有協助。
資料操作
- $ - 聲明與引用用一個scalar的變數
- @ - 聲明與引用一個list,但是當訪問一個list的成員時,需使用$ListName[index]
- % - 聲明與引用一個hash表,但是當訪問一個hash的成員時,需要使用$HashName{key}
特殊變數
- $0 - 當前運行指令碼的檔案名稱
- @ARGV - 當前運行指令碼的命令列參數列表
- $_ - 預設變數,如迴圈中的當前變數
- @_ - 函數的輸入參數列表
- %ENV - 系統的環境變數
- @INC - Perl的Include路徑列表,我們可以往該列表中添加我們自己的目錄來方便引用自訂的庫
- $! - 當前系統提示,錯誤資訊
- $^O - 作業系統的名字
- STDIN,STDOUT,STDERR - 輸入輸出的預設控制代碼,可以作一定的自訂
- => - 聲明一個hash時可以用來明確的表示出key=>value的對應關係
- $^I- 指定備份的檔案的尾碼名,如此,被修改的檔案將會自動以該尾碼名儲存一個副本
特殊用法
- &Sub - 調用一個函數,雖然Perl有些規則讓你在某些時候可以省略這裡的&符號,但是處於一致性考慮,所以自訂的函數的調用,我一律採用此種方式。
- $# - 用來取得模個數組的最大index, 一般情況下,也可以用-1來表示最後一個元素的index的
- qw() - 快速聲明一個字串數組,可以省略那些煩人的引號
Regex
- $ < digit > - 擷取被括弧捕獲的匹配
- $`, $&, $‘ - 擷取匹配的字串,以及其前後兩個部分
- ^,$ - 字串的始末位置,用作定位
常用函數
- pop, push, shift, unshift, reverse - list的操作函數
- keys,values, exists, each, delete - hash的操作函數
- chomp, split, join, index, substr, sort - 字串操作函數
- sprintf,printf, print - 格式化輸出函數
- system, exec, `` - 系統命令調用函數
- glob, unlink, mkdir, rmdir, rename,chmod,chown, open, close, opendir, closedir - 檔案系統操作函數
- stat, lstat,localtime,gmtime,utime - 文件屬性,時間相關函數
- hex, oct - 二進位,八進位,十六進位數轉化成十進位的函數
- grep, map - list進階操作函數
1 |
perldoc -f functionname |
常用庫
- File::Basename - 根據path擷取檔案名稱或者檔案路徑
- File::Spec - 根據檔案名稱與路徑組合成全路經
- File::Find - 遞迴遍曆某個目錄下所有檔案
- XML::Simple - 以一個複雜的結構來表示xml檔案,使用起來相當方便
- Time::HiRes - 經常用來計算一個操作所耗費的時間
- Getopt::Long - 當指令碼需要複雜的輸入參數與選項時用到
- Cwd - 拿到當前工作目錄
- IO::File - 檔案操作
- Win32 - 當需要調用一些Windows API時我會用它
像學曆史課本一樣學習Perl