編輯推薦
本書是Learning Perl一書的進階。學完本書之後,您可以使用Perl語言的特性編寫從簡單腳本到大型程序在內的所有程序,正是Perl語言的這些特性使其成為通用的編程語言。本書為讀者深入介紹瞭模塊、復雜的數據結構以及麵嚮對象編程等知識。
本書每章的篇幅都短小精悍,讀者可以在一到兩個小時內讀完,每章末尾的練習有助於您鞏固在本章所學的知識。如果您已掌握瞭Learning Perl中的內容並渴望能更進一步,本書將嚮您講授Perl語言的絕大多數核心概念,以便在任何平颱上編寫齣健壯的程序。
本書主題包括:
包和命名空間;
引用和作用域,包括正則錶達式的引用;
操作復雜的數據結構;
麵嚮對象編程;
編寫和使用模塊;
測試Perl代碼;
為CPAN做齣貢獻。
內容簡介
Perl是一種功能強大的通用編程語言,享有“一種擁有各種語言功能的夢幻腳本語言”等美譽,受到瞭國內程序員和係統管理員的青睞。
《Perl進階(第2版)》作為Learning Perl一書的進階,主要講解瞭如何更加有效地利用Perl進行開發。本書總共分為21章,每章內容篇幅不大,主要內容包括Perl簡介、使用模塊、中級操作基礎、引用簡介、引用和作用域、操作復雜的數據結構、對子例程的引用、文件句柄引用、正則錶達式引用、構建更大型的程序、創建自己的Perl發行版、對象簡介、測試簡介、帶數據的對象、Exporter模塊、對象析構、Moose簡介、高級測試、為CPAN貢獻代碼等知識。
《Perl進階(第2版)》適閤具有一定Perl基礎的程序員和係統管理員閱讀。對於高級Perl程序員來講,《Perl進階(第2版)》也是技術參考讀物。
作者簡介
Randal L. Schwartz是一位Perl編程語言專傢。除瞭寫作瞭Learning Perl以及Programming Perl的前兩版之外,他還是UNIX Review、Web Techniques、Sys Admin以及Linux Magazine的Perl專欄作傢。他對十多本Perl圖書以及200多篇雜誌文章做齣瞭貢獻。Randal還經營著一傢Perl培訓和谘詢公司(Stonehenge谘詢服務公司),並且憑藉著其技術技能、善於互動以及超高的人氣被公認為Perl的發言人。他還是一位相當有水準的K歌歌手。
brain d foy自從1998年起就是Stonehenge谘詢服務公司的一名講師,自從他成為物理係的研究生起就是一名Perl用戶,而且自從他擁有瞭電腦之後,就成瞭一名Mac的鐵杆用戶。他成立瞭Perl用戶組——New York Perl Mongers,還成立瞭非盈利的Perl Mongers公司,該公司幫助形成瞭全球200多個Perl用戶組。他是Perl核心文檔perlfaq部分的維護人,還維護著CPAN的多個模塊以及一些獨立的腳本文件。他是The Perl Review(一傢緻力於Perl的雜誌)的齣版人,並經常在各種會議(包括Perl Conference、Perl University、MaccusEvans BioInformatics’ 02和YAPC)上發錶演講。他寫作的Perl作品可以在O’Reilly Network、The Perl Journal、Dr. Dobbs、The Perl Review、use.perl.org以及多個Perl新聞組上找到。
Tom Phoenix自從1982年起投身於教育領域,在科學博物館工作的13多年裏,他經曆瞭解剖、爆炸、與有趣的小動物共事,以及冒著火花的高壓電等事情,然後從1996年起加入瞭Stonehenge谘詢服務公司,並講授Perl課程。從那時起,他去過瞭很多有趣的地方,沒準你不久之後就會在Perl Mongers的會議上見到他。當他有空閑時,就會在comp.lang.perl.misc和comp.lang.perl.moderated新聞組上迴答問題,而且為Perl的發展和使用貢獻頗多。除瞭Perl、Perl破解以及相關主題的工作之外,Tom還在業餘密碼學和講世界語方麵投入瞭很多時間。Tom住在俄勒岡州波特蘭市。
內頁插圖
目錄
目錄
第1章 簡介 1
1.1 背景知識 2
1.2 strict和warnings 2
1.3 Perl v5.14 3
1.4 關於這些腳注 4
1.5 關於後續的練習 4
1.6 獲取幫助的方式 5
1.7 如果是一個Perl課程講師 5
1.8 練習 6
第2章 使用模塊 7
2.1 標準發行版 7
2.2 探討CPAN 8
2.3 使用模塊 9
2.4 功能接口 10
2.5 麵嚮對象的接口 11
2.5.1 一個更典型的麵嚮對象模塊:Math::BigInt 12
2.5.2 更佳的模塊輸齣 13
2.6 核心模塊的內容 14
2.7 Perl綜閤典藏網 15
2.8 通過CPAN安裝模塊 16
2.8.1 CPANminus 16
2.8.2 手動安裝模塊 17
2.9 適時設定路徑 18
2.10 在程序外部設定路徑 20
2.10.1 使用PERL5LIB擴展@INC 20
2.10.2 在命令行擴展@INC目錄 21
2.11 local::lib 21
2.12 練習 23
第3章 中級基礎 24
3.1 列錶操作符 24
3.1.1 使用grep錶達式過濾列錶 25
3.1.2 使用map轉換列錶 27
3.2 使用eval捕獲錯誤 28
3.3 用eval語句塊動態編譯代碼 30
3.4 使用do語句塊 31
3.5 練習 32
第4章 引用簡介 33
4.1 在多個數組上完成相同的任務 33
4.2 PeGS:Perl圖形結構 35
4.3 對數組取引用 36
4.4 對數組引用進行解引用操作 38
4.5 去除大括號 40
4.6 修改數組 40
4.7 嵌套的數據結構 41
4.8 用箭頭簡化嵌套元素的引用 43
4.9 散列的引用 44
4.10 檢查引用類型 47
4.11 練習 49
第5章 引用和作用域 51
5.1 關於數據引用的更多信息 51
5.2 如果它曾是變量名將會怎樣 52
5.3 引用計數和嵌套數據結構 53
5.4 當引用計數齣現問題時 55
5.5 直接創建匿名數組 57
5.6 創建匿名散列 59
5.7 自動帶入 61
5.8 自動帶入和散列 63
5.9 練習 65
第6章 操作復雜的數據結構 67
6.1 使用調試器查看復雜的數據 67
6.2 使用Data::Dumper模塊查看復雜的數據 71
6.3 數據編組 74
6.3.1 使用Storable模塊對復雜數據排序 75
6.3.2 YAML模塊 80
6.3.3 JSON模塊 81
6.4 使用map和grep操作符 81
6.5 應用一點間接方法 81
6.6 選擇和改變復雜數據 83
6.7 練習 84
第7章 對子例程的引用 86
7.1 對命名子例程的引用 86
7.2 匿名子例程 90
7.3 迴調 92
7.4 閉包 93
7.5 從一個子例程返迴另一個子例程 94
7.6 作為輸入參數的閉包變量 97
7.7 閉包變量作為靜態局部變量 98
7.8 查詢我們自己的身份 101
7.8.1 令人著迷的子例程 102
7.8.2 轉儲閉包 105
7.9 練習 105
第8章 文件句柄引用 107
8.1 舊方法 107
8.2 改進的方法 108
8.3 指嚮字符串的文件句柄 110
8.4 文件句柄集閤 111
8.5 IO::Handle模塊和其他相應的模塊 112
8.5.1 IO::File模塊 113
8.5.2 IO::Scalar模塊 114
8.5.3 IO::Tee模塊 115
8.5.4 IO::Pipe模塊 116
8.5.5 IO::Null模塊和IO::Interactive模塊 117
8.6 目錄句柄 117
8.7 練習 118
第9章 正則錶達式引用 120
9.1 正則錶達式引用之前 120
9.2 預編譯模式 122
9.2.1 正則錶達式選項 123
9.2.2 應用正則錶達式引用 123
9.3 作為標量的正則錶達式 124
9.4 建立正則錶達式 126
9.5 創建正則錶達式的模塊 128
9.5.1 使用常見的模式 128
9.5.2 組裝正則錶達式 129
9.6 練習 130
第10章 實用的引用技巧 132
10.1更佳的輸齣 132
10.2 用索引排序 134
10.3 更為高效的排序 135
10.4 施瓦茨變換 136
10.5 使用施瓦茨變換實現多級排序 137
10.6 遞歸定義的數據 138
10.7 構建遞歸定義的數據 139
10.8 顯示遞歸定義的數據 142
10.9 避免遞歸 143
10.10 練習 146
第11章 構建更大型的程序 148
11.1 修改通用代碼 148
11.2 使用eval插入代碼 149
11.3 使用do語句 150
11.4 使用require語句 151
11.5 命名空間衝突的問題 153
11.6 使用包作為命名空間分隔符 154
11.7 Package指令的作用域 156
11.8 包和專門詞匯 157
11.9 練習 159
第12章 創建你自己的發行版 160
12.1 Perl模塊的兩個構建係統 160
12.1.1 在Makefile.PL內部 161
12.1.2 在Build.PL文件內部 162
12.2 我們的第一個發行版 163
12.2.1 h2xs工具 163
12.2.2 Module::Starter模塊 164
12.2.3 定製模版 165
12.3 在你的發行版內部 165
12.3.1 META文件 167
12.3.2 添加額外的模塊 168
12.4 模塊內部 169
12.5 老式文檔 171
12.5.1 段落的Pod命令 172
12.5.2 Pod段落 172
12.5.3 Pod格式標記 173
12.5.4 檢查Pod格式 174
12.6 模塊中的代碼 174
12.7 模塊構建的總結 175
12.7.1 創建基於Module::Build模塊的發行版 175
12.7.2 創建ExtUtils::Makemaker發行版 176
12.8 練習 176
第13章 對象簡介 177
13.1 如果我們可以和動物對話 177
13.2 介紹方法的調用箭頭 179
13.3 方法調用的額外參數 180
13.4 調用第二個方法進一步簡化 181
13.5 關於@ISA的幾個注意事項 183
13.6 方法重寫 184
13.7 開始從不同的地方查找 186
13.8 使用SUPER的實現方法 186
13.9 要對@_做些什麼 187
13.10 我們在哪裏 187
13.11 牧場總結 187
13.12 練習 189
第14章 測試簡介 190
14.1 為什麼需要測試 190
14.2 Perl的測試流程 191
14.3 測試的藝術 193
14.4 測試用具 195
14.5 標準測試 195
14.5.1 模塊編譯的檢查 196
14.5.2 模闆測試 198
14.5.3 測試Pod 200
14.6 添加第一個測試 201
14.7 測量測試覆蓋率 204
14.7.1 子例程覆蓋率 205
14.7.2 語句覆蓋率 205
14.7.3 分支覆蓋率 205
14.7.4 條件覆蓋率 206
14.8 練習 206
第15章 帶數據的對象 208
15.1 馬屬於馬類,各從其類是嗎 208
15.2 調用實例方法 210
15.3 訪問實例數據 211
15.4 如何構建Horse的實例 211
15.5 繼承構造函數 212
15.6 編寫能夠使用類或實例作為參數的方法 213
15.7 為方法添加參數 213
15.8 更有趣的實例 214
15.9 一匹不同顔色的馬 215
15.10 收迴存款 216
15.11 不要查看“盒子”裏麵的內容 217
15.12 更快的setter和getter 218
15.13 getter作為雙倍的setter 219
15.14 僅僅限製一個類方法或者實例方法 219
15.15 練習 220
第16章 一些高級對象主題 221
16.1 通用方法 221
16.2 為瞭更好的行為而測試對象 222
16.3 最後的手段 224
16.4 使用AUTOLOAD創建訪問器 225
16.5 更容易地創建getter和setter 226
16.6 多重繼承 228
16.7 練習 229
第17章 Exporter 230
17.1 use語句在做什麼 230
17.2 使用Expo
前言/序言
Perl進階(第2版) 一、 深入理解Perl的核心機製 本書將帶領您深入Perl語言的內在運作機製,超越基礎語法的錶麵,觸及Perl解釋器、內存管理、模塊加載等關鍵環節。我們將詳細剖析Perl的標量、數組、哈希等數據結構的內部錶示,理解它們在內存中的存儲方式以及Perl如何高效地進行操作。通過揭示Perl的垃圾迴收機製,您可以更好地管理程序中的內存資源,避免潛在的內存泄漏問題,從而編寫齣更穩定、更高效的Perl代碼。 對於Perl的包和模塊係統,本書會進行係統性的梳理。您將學習如何創建、組織和發布自己的Perl模塊,掌握模塊間的依賴關係管理,以及理解Perl的命名空間機製。我們將深入探討`use`和`require`的區彆與聯係,理解`BEGIN`、`INIT`、`CHECK`、`END`等特殊塊的作用,以及如何利用它們來控製模塊的加載和初始化過程。通過對Perl內部符號錶機製的深入理解,您可以更靈活地進行元編程,動態地創建和修改子例程、變量等,為編寫高度抽象和靈活的代碼奠定基礎。 二、 精通Perl的麵嚮對象編程 Perl的麵嚮對象編程(OOP)雖然有著其獨特的風格,但其強大的錶達能力和靈活性不容忽視。本書將係統地介紹Perl的OOP範式,從基礎的類和對象的概念齣發,逐步深入到繼承、多態、封裝等核心OOP原則。您將學習如何使用`bless`來創建對象,理解Perl對象模型的工作原理,以及如何設計和實現復雜的類層次結構。 我們還會探討Perl中常見的OOP工具和模式,例如`Moose`、`Moo`等現代OOP框架。這些框架極大地簡化瞭Perl的OOP開發,提供瞭更清晰的語法、更強大的元編程能力和更豐富的特性,例如類型約束、屬性繼承、方法組閤等。通過學習這些現代化的OOP工具,您將能夠編寫齣結構清晰、易於維護、可擴展性強的麵嚮對象Perl程序。 三、 掌握Perl的高級特性與並發編程 Perl擁有許多強大的高級特性,它們能夠幫助您編寫齣更簡潔、更高效的代碼。本書將深入講解Perl的閉包、代碼塊、匿名函數等概念,展示它們在函數式編程和事件驅動編程中的應用。您將學習如何利用閉包來創建具有私有狀態的函數,如何使用匿名函數來傳遞代碼作為參數,以及如何將它們與Perl的迭代器結閤使用,實現更優雅的數據處理。 在並發編程方麵,Perl提供瞭多種實現多任務和並行處理的機製。我們將詳細介紹Perl的進程(forking)、綫程(threads)和協程(coroutines)等概念,並分析它們各自的優缺點和適用場景。您將學習如何使用Perl的`fork`函數來創建子進程,如何利用Perl的`threads`模塊來實現多綫程程序,以及如何利用協程來編寫非阻塞I/O和異步操作。此外,我們還將探討Perl在處理並發場景時可能遇到的挑戰,如競態條件、死鎖等,並介紹相應的同步和互斥機製,確保程序的正確性和穩定性。 四、 深入正則錶達式的威力 正則錶達式是Perl最強大也是最常用的特性之一。本書將把正則錶達式的講解提升到新的高度,不再局限於基礎的匹配和替換。我們將深入解析Perl正則錶達式引擎的工作原理,包括其內部的DFA/NFA模型,以及各種量詞、分組、斷言的精確含義和性能影響。您將學習如何利用lookarounds(零寬斷言)、原子組(possessive quantifiers)等高級特性來編寫更精確、更高效的匹配模式。 本書還將介紹Perl中豐富的正則錶達式修飾符,以及它們如何影響匹配的行為。您將學習如何結閤使用`s`(單行模式)、`m`(多行模式)、`i`(忽略大小寫)、`x`(忽略空白)等修飾符,來處理各種復雜的文本匹配場景。此外,我們還將探討Perl中正則錶達式的性能優化技巧,例如如何避免迴溯陷阱(backtracking traps),如何使用預編譯正則錶達式來提高匹配速度,以及如何利用Perl提供的內建函數來簡化復雜的模式匹配操作。 五、 掌握Perl的IO操作與網絡編程 Perl在文件和網絡I/O方麵擁有豐富的庫和強大的功能。本書將帶您深入Perl的I/O模型,從基礎的文件讀寫操作齣發,逐步過渡到更高級的網絡編程。您將學習如何使用Perl的`open`函數來高效地打開、讀取和寫入文件,掌握不同文件模式和緩衝區的設置。我們將詳細講解Perl的`select`和`poll`等I/O多路復用機製,以及如何利用它們來實現高並發的網絡服務。 本書還將介紹Perl在網絡編程領域的經典模塊,例如`LWP::UserAgent`用於HTTP客戶端操作,`Net::HTTP`用於更底層的HTTP協議交互,以及`IO::Socket`和`Net::TCP`等用於TCP/IP套接字編程。您將學習如何編寫客戶端和服務器程序,實現HTTP請求、FTP下載、SMTP郵件發送等常見的網絡應用。此外,我們還將探討Perl在處理二進製數據、文件傳輸協議(如FTP、SFTP)以及網絡安全(如SSL/TLS)方麵的能力。 六、 學習Perl的錯誤處理與調試技巧 編寫健壯的Perl程序離不開有效的錯誤處理和調試機製。本書將係統地介紹Perl的錯誤處理策略,包括`die`和`warn`的使用,`eval`塊的錯誤捕獲,以及`$@`變量的檢查。您將學習如何設計閤理的錯誤處理流程,確保程序在遇到異常情況時能夠優雅地退齣或進行恢復。 在調試方麵,本書將介紹Perl自帶的調試器`perlbug`,以及一些流行的第三方調試工具。您將學習如何使用斷點、單步執行、變量監視等調試技巧來定位和修復代碼中的bug。此外,我們還將分享一些高效的調試策略,例如使用`Data::Dumper`來打印復雜數據結構,利用日誌記錄來追蹤程序執行流程,以及如何通過代碼審查來預防潛在的問題。 七、 探索Perl的性能優化與代碼重構 對於追求極緻性能的Perl開發者,本書將提供一係列深入的性能優化技巧。您將學習如何使用Perl的性能分析工具(如`Devel::NYTProf`)來識彆程序的性能瓶頸,並針對性地進行優化。我們將探討算法優化、數據結構選擇、內存管理以及I/O操作的效率提升等多個維度。 代碼重構是提升代碼可維護性和可讀性的重要手段。本書將介紹一些常見的代碼重構模式,以及如何在Perl中有效地進行代碼重構。您將學習如何識彆“壞味道”(code smells),如何逐步改進代碼結構,以及如何利用Perl的單元測試來確保重構過程的安全性。通過掌握這些技巧,您將能夠編寫齣既高效又易於維護的Perl代碼,為項目的長期發展打下堅實基礎。 八、 深入瞭解Perl的生態係統與最佳實踐 Perl擁有一個龐大而活躍的生態係統,其中蘊含著無數的寶貴資源。本書將引導您探索CPAN(Comprehensive Perl Archive Network),瞭解如何搜索、安裝和使用CPAN模塊來解決各種問題。您將學習如何評估CPAN模塊的質量和穩定性,以及如何貢獻自己的模塊到CPAN。 最後,本書還將總結Perl開發的最佳實踐。這包括代碼風格、命名約定、文檔編寫、測試覆蓋率以及版本控製等方麵。通過遵循這些最佳實踐,您將能夠編寫齣更易於理解、更易於協作、更可靠的Perl代碼,並在Perl社區中獲得更好的認可。