摘要
本書是Perl 編程領域的“聖經級”著作。它提供了一百多個詳實的套用案例,足以涵蓋編程過程中經常遇到的方方面面,由此詳細闡釋出各種高效且簡潔的寫法。本書第1 版曾暢銷十年之久,而在第2 版中不僅修正了前版存在的一些問題,更與時俱進地引入了許多Perl 領域的新主題,使內容更加完善豐富,也更具實用性。
本書為初級Perl 程式設計師鋪就了一條通往高階之路,而對高級Perl 程式設計師來說,本書也是必備的技術參考。
序言
十年前,當我開始學習Perl的時候,我認為自己對這門語言已經了解得很多了——沒錯,對這門語言本身,我確實知道得很多。而我所不知道的,則是那些真正賦予Perl力量的慣用方法和其他靈活的語法結構。儘管不用它們也能寫出絕大多數程式,但不掌握這些,則意味著自己的知識結構還不夠完善,自己的工作效率也遠遠達不到理想狀態。
我是幸運的,因為我得到了本書的第1版。不過,那本書從來沒有機會停留在我的書架上,它一直都在我的包里,一有空我就會打開來讀一段。
Joseph N. Hall這本書的內容編排簡單得讓人愛不釋手,每一段內容雖短,但都飽含智慧,而且講得十分明白透徹。不瞞您說,我們免費的Perl Tips電子報,正是受了本書的啟發才創刊的,這份電子報一直致力於探討Perl及其社區的發展。
對於一門語言來說,十年意味著很大的變化,而社區對語言的認知則有更大的變化。因此,讓我非常高興的不僅是聽到這本書的第2版即將出版的訊息,更重要的是這個新版本出自Perl社區最傑出的兩位成員之手。
不用說,brian對Perl的全心投入是有目共睹的。他不僅寫了很多Perl語言方面的書,還負責出版一份雜誌(The Perl Review),並且維護著Perl官方網站中的FAQ(常見問題解答),另外他在眾多Perl及程式語言社區一直享有盛譽。
而Josh則以他運營的著名播客網站Perlcast聞名,他從2005年就開始在這個網站中以音頻形式播放Perl新聞了。Josh總能找到那些著名的、有趣的人,對他們進行採訪,這使他自己快速積累了大量知識,也讓我對他羨慕不已。
總之,能向親愛的讀者朋友推薦這本書的第2版,我感到榮幸之至。希望它能讓你真正掌握這門語言的精髓,就像當年第1版對我的啟蒙那樣。
Paul Fenwick
Perl Training Australia總裁
目錄
第1 章 Perl 基礎 1
條款1 查閱Perl 及其模組的文檔 1
條款2 在需要時開啟Perl 新特性 3
條款3 打開約束指令,讓編碼更規範 4
條款4 了解魔符的含義 7
條款5 弄清變數名字空間 8
條款6 了解字串和數值比較間的差異 9
條款7 弄清何時變數為假,並依此作出正確判別 11
條款8 理解字元串和數字之間的轉換 14
條款9 弄清列表和數組間的差別 17
條款10 如需空數組,請勿用undef 賦值 19
條款11 僅需單個元素時請勿用切片 21
條款12 理解上下文及其對操作的影響 25
條款13 用數組或散列集結一組數據 27
條款14 用bignum 處理大數 29
第2 章 Perl 的地道用法 31
條款15 為優雅、簡潔而使用$_ 32
條款16 了解其他默認參數 35
條款17 常見簡寫和雙關語 37
條款18 避免過分依賴標點符號 41
條款19 調整列表格式以便於維護 43
條款20 善用foreach、map 和grep 44
條款21 了解各種字元串引用方法 47
條款22 掌握多種排序方式 50
條款23 通過智慧型匹配簡化工作 54
條款24 用given-when 構造switch 語句 55
條款25 用do { }創建內聯子程式 58
條款26 用List::Util 和List::MoreUtils 簡化列表處理 60
條款27 用autodie 簡化錯誤處理 63
條款28 了解正則表達式操作符的優先權 66
條款29 使用正則表達式的捕獲功能 69
條款30 使用更精確的空白字元組 74
條款31 使用命名捕獲,給匹配加標籤 77
條款32 僅需分組時,用非捕獲括弧 78
條款33 小心處理匹配變數 79
條款34 能懶則懶,不要貪婪 81
條款35 用零寬斷言匹配字串中的特定位置 82
條款36 簡單字串處理應避免使用正則表達式 85
條款37 提高正則表達式的可讀性 87
條款38 避免不必要的回溯 90
條款39 僅編譯正則表達式一次 93
條款40 預編譯正則表達式 94
條款41 正則表達式的性能評測 95
條款42 不要濫造正則表達式 97
第4 章 子程式 99
條款43 理解my 和local 之間的差異 99
條款44 若非必要請勿直接使用@_ 106
條款45 用wantarray 按需返回列表 108
條款46 傳遞引用而非副本 110
條款47 用散列傳遞命名參數 113
條款48 通過參數原型聲明以特殊方式解析參數 116
條款49 創建閉包鎖住數據 118
條款50 用子程式創建新子程式 121
第5 章 檔案與檔案句柄 124
條款51 不要忽略檔案測試操作符 124
條款52 始終以三項參數的形式調用open 126
條款53 採用不同方式讀取數據流 127
條款54 處理字元串的檔案句柄 129
條款55 靈活的輸出方式 132
條款56 用File::Spec 或Path::Class 處理檔案路徑 134
條款57 將數據留於磁碟以節約記憶體 136
第6 章 引用 139
條款58 理解引用和引用的語法 139
條款59 將引用類型和原型進行比較 145
條款60 通過引用創建包含數組的數組 147
條款61 別將匿名數組和列表直接量搞混淆 149
條款62 通過匿名散列創建C 風格的struct 結構 150
條款63 小心循環數據結構 152
條款64 用map 和grep 操作複雜數據結構 154
第7 章 CPAN 158
條款65 以非管理員許可權安裝CPAN 模組 159
條款66 擁有自己的CPAN 161
條款67 減少公共代碼帶來的風險 164
條款68 安裝模組前先行調研 166
條款69 確保Perl 能找到我們的模組 168
條款70 為CPAN 作貢獻 171
條款71 了解常用模組 173
第8 章 Unicode 176
條款72 在原始碼中使用Unicode 字元 177
條款73 告訴Perl 該用何種編碼方式 179
條款74 通過代碼值或名字輸入Unicode 字元 180
條款75 位組字串轉換到字元字串 182
條款76 Unicode 字元和屬性的模式匹配 185
條款77 同字素打交道,而不是字元 188
條款78 謹慎處理資料庫中的Unicode 190
第9 章 軟體分發 192
條款79 用Module::Build 構建發行版 192
條款80 不必手工新建軟體發行版 194
條款81 給模組取個好名字 198
條款82 在代碼中嵌入Pod 文檔 201
條款83 限制我們的發行版用於特定平台 204
條款84 檢查Pod 文檔 206
條款85 嵌入其他語言代碼 209
條款86 用XS 連結低級語言,提高運行速度 211
第10 章 測試 215
條款87 用prove 靈活運行測試 215
條款88 有目的性地運行測試 218
條款89 用依賴注入避免特殊測試邏輯 220
條款90 避免給方法引入不必要的東西 222
條款91 把程式寫成模組便於測試 224
條款92 用虛擬的對象或接口測試 227
條款93 用SQLite 創建測試用資料庫 231
條款94 用Test::Class 編寫結構化測試 232
條款95 項目一開始就準備好測試 235
條款96 度量測試覆蓋率 240
條款97 把CPAN Testers 當作QA 團隊 243
條款98 設定持續編譯系統 244
第11 章 警告信息 250
條款99 啟用警告功能定位可疑代碼 250
條款100 利用詞法作用域選擇性啟用或關閉警告 253
條款101 用die 拋出異常 255
條款102 用Carp 來獲得棧跟蹤信息 256
條款103 正確處理異常 259
條款104 通過污染檢查跟蹤危險數據 261
條款105 對老舊程式啟用污染警告 263
第12 章 資料庫 265
條款106 預備SQL 語句以復用並節省時間 265
條款107 利用SQL 占位符將參數值自動引起 268
條款108 通過綁定返回列快速訪問數據 270
條款109 復用資料庫連線 272
第13 章 雜項 275
條款110 編譯並安裝自己的perl 解釋器 275
條款111 用Perl::Tidy 美化代碼 277
條款112 使用Perl Critic 280
條款113 用Log::Log4perl 記錄程式運行狀態 284
條款114 明白循環內的數組何時會被修改 289
條款115 不要用正則表達式提取逗號分隔的字串 290
條款116 用unpack 處理固定列寬的數據 291
條款117 用pack 和unpack 對數據作變形處理 293
條款118 借用typeglob 訪問符號表 298
條款119 用BEGIN 初始化,以END 善後 300
條款120 用單行Perl 命令作為迷你程式 302
附錄 Perl 資源 307