精通Perl(第2版)
精通Perl(第2版)(通往Perl大師之路必讀經典書籍,體現了一種程式設計思維,能夠幫你解決很多實際的問題)
【美】brian d foy(布瑞恩·D·福瓦)著
王興宇 劉宸宇 譯
ISBN 978-7-121-25419-2
2015年3月出版
定價:89.00元
424頁
16開
編輯推薦
- 探索高階的正規表示式功能
- 如何避免程式的常見安全問題
- 對 Perl 程式的效能分析和基準測試可以讓你發現改進之處
- 清理 Perl 程式碼,使之更加直觀和易讀
- 瞭解 Perl 如何持續跟蹤軟體包內的變數
- 動態定義子程式
- 不必改動原有程式碼即可提升模組
- 使用位操作和位向量更有效地儲存更大的資料
- 學習如何檢測 Perl 中未報告的錯誤
- 深入學習日誌、資料持久化和繫結變數的魔法
內容提要
《精通Perl(第2版)》作者brian d foy 用他生動的第一人稱視角向各位讀者介紹了精彩的Perl 高階語言知識以及豐富的實戰工具與實用技巧。《精通Perl(第2版)》各章的內容相對獨立,您完全可以根據自己的興趣或需要直達你所需要的章節。
《精通Perl(第2版)》的讀者主要面對具有較多經驗的Perl 程式設計人員。閱讀本書前,建議閱讀本書的姊妹篇《Perl 語言入門》和《Perl 進階》。作者在這本書裡針對除錯、最佳化、錯誤和日誌等方面均有深入解析,也揭示了Perl 中如繫結變數、持久化儲存等各種魔法般的特性和功能的實現細節和用途。書中還對如何開發、除錯自己的模組,以及如何做出更適合使用的模組做了詳細介紹。
總之,本書可以作為讀者在向Perl 高手進階過程中的一個助力器,希望讀者能在閱讀過程中深入思考,加入自己的理解,用Perl 來完成一件件神奇的事情。
目錄
前言 vii
第1章 高階正規表示式 1
可讀的正規表示式/x 和(?#...) 1
全域性匹配3
全域性匹配錨定5
遞迴正規表示式7
重複子模式7
前後查詢19
向前查詢斷言(?=PATTERN) 與(?!PATTERN) 19
向後查詢斷言(?<!PATTERN) 與(?<=PATTERN) 23
除錯正規表示式26
引數-D 26
總結31
延伸閱讀31
第2章 安全程式設計技術 33
不良資料會毀了你的生活33
汙點檢測34
用警告代替致命錯誤36
自動汙點檢測模式37
mod_perl 37
汙點資料37
汙點檢測的副作用39
清除資料汙點40
IO::Handle::untaint 42
雜湊表關鍵字42
Taint::Util 43
用汙點資料選擇無汙點資料44
符號引用44
DBI 防禦性資料庫程式設計47
system 和exec 命令的列表形式50
三個引數的open 函式51
sysopen 51
限制特殊許可權52
Safe 隔間52
Safe 模組的侷限性59
娛樂一下59
總結61
延伸閱讀61
第3章 Perl 偵錯程式 63
避免浪費太多的時間63
世界上最好的偵錯程式64
安全地修改模組65
封裝子程式66
Perl 偵錯程式69
備選偵錯程式70
用-d 啟用其他偵錯程式70
Devel::ptkdb 70
Devel::ebug 72
Devel::hdb 73
整合開發環境偵錯程式73
EPIC 74
Komodo 74
總結74
延伸閱讀75
第4章 Perl效能分析 77
找出罪魁禍首77
通用方法81
DBI 效能分析83
其他DBI::Profile 報告87
懶惰是美德,能否簡單點89
切換為資料庫89
Devel::NYTProf 模組92
寫一個自己的分析器92
Devel::LineCounter 模組92
效能分析測試套件93
Devel::Cover 模組94
總結96
延伸閱讀96
第5章 Perl基準測試 97
基準測試理論97
測量時間98
比較程式碼102
不要停止思考105
隔離環境109
處理異常值112
記憶體使用113
perlbench 工具119
總結120
延伸閱讀121
第6章 清理Perl程式123
好的風格123
perltidy 程式124
去除混淆126
對隱藏程式碼的解碼126
用B::Deparse 對程式碼進行逆向解析129
Perl::Critic 模組131
建立我們自己的Perl::Critic 策略135
總結136
延伸閱讀136
第7章 符號表和Typeglob 137
軟體包變數和詞法變數137
獲取軟體包變數139
符號表141
Typeglob 143
別名146
舊程式碼中的檔案控制程式碼引數148
給匿名子程式命名149
簡單的方法151
總結152
延伸閱讀152
第8章 動態子程式 153
子程式作為資料153
建立與替換命名子程式157
符號引用159
遍歷子程式列表161
處理流水線163
自引用匿名子程式164
方法列表165
子程式作為引數使用165
自動載入方法170
雜湊表作為物件171
自動切分172
總結173
延伸閱讀173
第9章 修改和提升模組175
選擇正確的解決方案175
給作者傳送補丁175
本地修補177
接管一個模組177
分支177
從頭開始做自己的模組178
替換模組的一部分178
派生子類181
一個ExtUtils::MakeMaker 的例子184
其他例子186
封裝子程式186
總結188
延伸閱讀188
第10章 配置Perl程式191
不要做的事191
將配置程式碼放到獨立的檔案中193
更好的辦法194
環境變數194
特殊環境變數195
開啟額外的輸出195
命令列選項197
Perl 的-s 選項198
Getopt 模組199
配置檔案204
ConfigReader::Simple 204
Config::IniFiles 205
Config::Scoped 206
其他配置檔案206
具有不同名字的指令碼207
互動和非互動程式207
Perl 的配置模組209
不同的作業系統209
總結211
延伸閱讀211
第11章 檢測和報告錯誤 213
Perl 錯誤處理基礎213
作業系統錯誤214
子程式錯誤216
作業系統特定的錯誤218
報告模組錯誤219
分解問題220
異常222
eval 222
多層巢狀的die 223
在die 中使用引用225
用die 傳遞物件226
打破$@ 229
autodie 231
報告罪魁禍首233
捕獲異常237
Try::Tiny 237
TryCatch 239
多型返回值240
總結241
延伸閱讀241
第12章 日誌 243
記錄錯誤和其他資訊243
Log4perl 244
子程式引數246
配置Log4perl 247
持久化日誌配置251
日誌分類251
其他的Log::Log4perl 功能254
總結255
延伸閱讀255
第13章 資料持久化257
Perl 特有的格式257
打包257
定長記錄259
展開二進位制格式259
Data::Dumper 260
類似的模組264
Storable 模組266
凍結資料268
Storable 模組的安全問題270
Sereal 模組273
DBM 檔案278
dbmopen 函式278
DBM::Deep 模組278
Perl 所不認識的格式280
JSON 格式280
YAML 格式282
MessagePack 格式285
總結286
延伸閱讀286
第14章 使用Pod289
Pod 格式289
Pod 指令289
編碼291
正文元素291
轉換Pod 292
Pod 轉換程式292
Pod::Perldoc::ToToc 模組294
Pod::Simple 模組295
從Pod::Simple 派生子類298
Web 伺服器中的Pod 299
測試Pod 299
檢查Pod 299
Pod 覆蓋率300
隱藏和忽略函式的Pod 覆蓋率檢查301
總結302
延伸閱讀302
第15章 位操作305
二進位制數305
以二進位制數方式輸出306
位運算子307
一元取反運算子(~) 308
按位與操作(&) 310
按位或操作(|) 311
按位異或操作(ˆ) 312
左移位(<<)和右移位(>> )運算子314
位向量314
vec 函式316
位字串的儲存318
儲存DNA 321
素數判定322
記錄事情323
總結324
延伸閱讀324
第16章 繫結變數的魔法 327
看起來普通的變數327
在使用者層面328
帷幕之後329
標量330
Tie::Cycle 模組330
有界整數333
自毀值334
陣列335
重新建立陣列336
一些現實中的東西340
雜湊表345
檔案控制程式碼347
總結349
延伸閱讀350
第17章 模組即程式351
main 入口351
回到過去352
誰在呼叫352
測試程式353
模組即測試354
建立程式釋出包359
給程式里加內容362
釋出程式366
總結367
延伸閱讀367
附錄A 延伸閱讀369
Perl 書籍369
非Perl 書籍371
附錄B brian 的Perl 問題解決指導手冊 373
解決問題的哲學373
我的方法374
那些我做過和仍在做的蠢事378
本書模組索引381
索引385
精彩節摘
譯者序
——獻給逝去的和新生的紀念
作為譯者,總是有一些特權,比如說,可以在翻譯的書前面,用鉛字寫一些自己想說的話。當然,作為讀者,您可能不喜歡,不過,請您諒解我們激動的心情,願意的話,您可以看看我們的吐槽。
我的父親是一個傳統的老知識分子,雖然我自己並不成器,但是他一直告訴我,要我寫一些東西出來,留一些文字,因此能出版一些自己的文字一直是我心裡長久的夢想。不過,我在各種方面的積澱還遠遠不夠,所以直到現在也沒有足以稱道的文字可以出版。
在一個偶然的機會,我得到了付睿老師的委託,和劉宸宇一同接下了這本《精通Perl》的翻譯工作。雖然翻譯工作和出版自己的文字還不同,但是我想這也是我給去世的父親的一點紀念吧。
Perl 我用了有十多年了吧,這門語言基本上算是我從事網際網路行業以來第一門真正掌握和熟悉的語言了。最初是從一本薄薄的《Perl語言入門》,大約花了一週入門的。當時正值第一波的網際網路熱潮,工作方面使用Perl甚多,也陸續看過Perl方面的各種書籍,但是從來沒有想到自己會有機會翻譯一本Perl方面的書,更別說是這本經典Perl三部曲之一的《精通Perl》。
雖然現在Perl用的比較少了,但是今年Larry Wall先生來華訪問時,還是專門去朝覲了一番。然後不久,就接到了付睿老師的委託,可謂有緣。
我平時的工作比較忙,而且也組織運作著一個翻譯組:LCTT(Linux中國翻譯組- ),業餘時間都佔滿了,所以當時對是否要接下翻譯工作有些猶豫。我和LCTT的核心成員之一劉宸宇(tinyeyeser)商量了一番,感覺這個事情還是很有意義的,所以我們兩個共同接下了對這本書的翻譯工作。
王興宇
我要把這本書獻給我剛出生的小天使,翻譯完交稿不到10天,她便降臨到我的世界裡,成為了我生活中不可缺少的一部分。
一直以來,我喜歡翻譯對話、評論、調侃性質的技術部落格等文章,鍾情於感受那種面對面交流的感覺;而技術書籍這種相對較為正式的翻譯,對於我來說,反而是件痛苦的事,哪怕只翻譯半本(前言、附錄及前8章)。但是當我真正深入本書,與brian d foy 正面交鋒時,我發現,這不正是我所熟悉的面對面的對話嗎?是的!不同於一般的技術書籍,大師的行文,幾乎所有的主觀句子都是以第一人稱“I”開頭,這就好像他坐在你面前,手把手講授一樣,生動、客觀、幽默、立體!因此,我和王興宇(wxy)在翻譯的時候,把大部分“I”翻譯成了“我們”,這樣既忠於作者的語境,也更貼閤中國課堂上老師的講課習慣。
馮德倫的電影《太極》裡有一句詞:“人這一輩子,幹好一件事就足夠了”。我自認為不是一個有長性的人,一件事情很難堅持做到最好,總是覺得60分及格就可以了。因此,翻譯過程中一度出現了厭煩情緒,但我很高興自己成功堅持了下來。我要感謝幾個月來,整個翻譯過程中一直陪伴我督促我的媳婦兒,她懷著身孕,每當我消沉的時候,都會在我耳邊給予
我支援和鼓勵,“翻譯完了嗎?翻譯完了嗎?趕緊翻譯啊!好好翻譯啊!”每個成功男人的背後,都有一個偉(lao)大(dao)的女人。我愛這個嘮叨的女人!
劉宸宇
Perl 作為老牌的程式語言,其成熟度和應用廣泛令人稱道,也是系統管理員和科研工作所必備的技能之一,因此,我們希望這本書的再版翻譯,能夠幫助讀者進一步掌握Perl 語言的應用,也希望能夠為開源社群反哺更多的智慧。
將來,如果有機會,我們也希望這本書能夠以某種開源方式,分享給社群,並接受社群的不斷反饋和完善,成為一本真正有生命力的書籍。
一本書的出版,其實要感謝很多人,雖然俗套,但是我們覺得依然有必要,佔用一點小小的空間感謝他們:
感謝我們的家人的支援。
感謝我們的同事和領導的支援。
感謝編輯付睿老師的信任和委託。
感謝編輯李利健老師的辛勤審校。
感謝所有不知名的工作人員的辛勤工作。
王興宇&劉宸宇
作者簡介
brian d foy是一名多產的 Perl 培訓講師和作家,其出版的 The Perl Review 幫助人們透過教育、諮詢、程式碼審查等方面來學習和使用 Perl。
前言
譯者序
——獻給逝去的和新生的紀念
作為譯者,總是有一些特權,比如說,可以在翻譯的書前面,用鉛字寫一些自己想說的話。當然,作為讀者,您可能不喜歡,不過,請您諒解我們激動的心情,願意的話,您可以看看我們的吐槽。
我的父親是一個傳統的老知識分子,雖然我自己並不成器,但是他一直告訴我,要我寫一些東西出來,留一些文字,因此能出版一些自己的文字一直是我心裡長久的夢想。不過,我在各種方面的積澱還遠遠不夠,所以直到現在也沒有足以稱道的文字可以出版。
在一個偶然的機會,我得到了付睿老師的委託,和劉宸宇一同接下了這本《精通Perl》的翻譯工作。雖然翻譯工作和出版自己的文字還不同,但是我想這也是我給去世的父親的一點紀念吧。
Perl 我用了有十多年了吧,這門語言基本上算是我從事網際網路行業以來第一門真正掌握和熟悉的語言了。最初是從一本薄薄的《Perl語言入門》,大約花了一週入門的。當時正值第一波的網際網路熱潮,工作方面使用Perl甚多,也陸續看過Perl方面的各種書籍,但是從來沒有想到自己會有機會翻譯一本Perl方面的書,更別說是這本經典Perl三部曲之一的《精通Perl》。
雖然現在Perl用的比較少了,但是今年Larry Wall先生來華訪問時,還是專門去朝覲了一番。然後不久,就接到了付睿老師的委託,可謂有緣。
我平時的工作比較忙,而且也組織運作著一個翻譯組:LCTT(Linux中國翻譯組- ),業餘時間都佔滿了,所以當時對是否要接下翻譯工作有些猶豫。我和LCTT的核心成員之一劉宸宇(tinyeyeser)商量了一番,感覺這個事情還是很有意義的,所以我們兩個共同接下了對這本書的翻譯工作。
王興宇
我要把這本書獻給我剛出生的小天使,翻譯完交稿不到10天,她便降臨到我的世界裡,成為了我生活中不可缺少的一部分。
一直以來,我喜歡翻譯對話、評論、調侃性質的技術部落格等文章,鍾情於感受那種面對面交流的感覺;而技術書籍這種相對較為正式的翻譯,對於我來說,反而是件痛苦的事,哪怕只翻譯半本(前言、附錄及前8章)。但是當我真正深入本書,與brian d foy 正面交鋒時,我發現,這不正是我所熟悉的面對面的對話嗎?是的!不同於一般的技術書籍,大師的行文,幾乎所有的主觀句子都是以第一人稱“I”開頭,這就好像他坐在你面前,手把手講授一樣,生動、客觀、幽默、立體!因此,我和王興宇(wxy)在翻譯的時候,把大部分“I”翻譯成了“我們”,這樣既忠於作者的語境,也更貼閤中國課堂上老師的講課習慣。
馮德倫的電影《太極》裡有一句詞:“人這一輩子,幹好一件事就足夠了”。我自認為不是一個有長性的人,一件事情很難堅持做到最好,總是覺得60分及格就可以了。因此,翻譯過程中一度出現了厭煩情緒,但我很高興自己成功堅持了下來。我要感謝幾個月來,整個翻譯過程中一直陪伴我督促我的媳婦兒,她懷著身孕,每當我消沉的時候,都會在我耳邊給予
我支援和鼓勵,“翻譯完了嗎?翻譯完了嗎?趕緊翻譯啊!好好翻譯啊!”每個成功男人的背後,都有一個偉(lao)大(dao)的女人。我愛這個嘮叨的女人!
劉宸宇
Perl 作為老牌的程式語言,其成熟度和應用廣泛令人稱道,也是系統管理員和科研工作所必備的技能之一,因此,我們希望這本書的再版翻譯,能夠幫助讀者進一步掌握Perl 語言的應用,也希望能夠為開源社群反哺更多的智慧。
將來,如果有機會,我們也希望這本書能夠以某種開源方式,分享給社群,並接受社群的不斷反饋和完善,成為一本真正有生命力的書籍。
一本書的出版,其實要感謝很多人,雖然俗套,但是我們覺得依然有必要,佔用一點小小的空間感謝他們:
感謝我們的家人的支援。
感謝我們的同事和領導的支援。
感謝編輯付睿老師的信任和委託。
感謝編輯李利健老師的辛勤審校。
感謝所有不知名的工作人員的辛勤工作。
王興宇&劉宸宇
前言
Mastering Perl(《精通Perl》)是本系列的第三本書。第一本書《Perl 語言入門》向讀者介紹了Perl 語法的基礎部分;第二本書《Perl 進階》介紹瞭如何建立可重用的Perl 軟體;本系列的第三本書,也就是本書,將所有的相關知識進行整合,為讀者展示如何更加自如地運用Perl。
本書並非所謂的小竅門合集,它體現的是關於Perl 語言程式設計的一種思考方式,也體現在你可能會遇到的包括除錯、維護、配置等實際問題中,還體現在你作為一名職業程式設計師的現實生活中。本書要帶給你的不僅僅是發現問題之術,而是為你開啟屬於你的掌控答案之道。
成為一名大師
僅有本書並不能使你成為一名Perl 大師,要想成為大師,你需要依靠自己,經過大量的Perl程式設計實踐,嘗試大量的新鮮事物,同時犯下大量的錯誤。我將幫助你的是帶你走上正確的道路,但是,成就大師之路註定是一條獨立的自主之路。作為一名Perl 大師,除了能回答他人的問題,還要能夠找到自己問題的解答。
在同業公會的黃金年代,工匠們在掌握一門手藝成為大師的過程中,實際上都遵循著一條特定的道路。他們從學徒工開始做起,不斷重複枯燥的低微工作,直到他們掌握足夠的技巧,成為更加值得信任的熟練工(journeymen)。熟練工肩負更多的責任,但仍需在公認的大師級工匠手下工作。當學到足夠的手藝後,熟練工必須生產一件“大師級作品”來證明他的技巧。如果其他大師承認了這件作品具有大師級水準,這名熟練工才能成為一名公認的工匠大師。
熟練工和工匠大師們也會四處遊歷,向其他大師學習新的技術和技巧(儘管有爭議,但這可能是熟練工的單詞中一部分是“journey——旅行”的由來)。也許是對秘密技藝或不同的方法故意有所保留,每一位工匠大師都掌握著一些其他人所沒有掌握的東西。熟練工的部分訓練內容就是向不同的大師學習。
與其他工匠大師和熟練工的交流不斷延續著工匠大師們的學習過程。工匠大師們將從其他大師那裡學來的經驗傳授給熟練工,在這個過程中,熟練工也會把自己從另一些工匠大師那裡學來的技巧帶回給這名大師。真正的大師從不停止學習。
學徒工遵循的道路影響著他所學習的內容。一個師從多位大師的學徒工可以接觸更多的授業途徑以及視角,所有這些他都可以融合成為自己的技藝方法。某一位大師身上看似古怪的東西,透過另一位大師的不同視角更新或重新定義,也許會給這名學徒工帶來另一種平衡的觀點。另外,如果這名學徒工想要學習成為一名木匠或者泥瓦匠,不同的師父會根據不同的目標來傳授技藝,這就給了這名學徒工一個機會來學習不同的程式和方法。
不幸的是,程式設計師並不處在這樣的公會系統中。大部分Perl 程式設計師都是自學Perl (作為一名Perl 講師,我對此很鬱悶),自己程式設計,從來未曾得到過良師益友的幫助。我也是這麼過來的。我買來第1 版的《Perl 語言入門》自學完以後,儘管當時Perl 已經比較常見,但我仍然是周圍人中唯一聽說過Perl 的人。之後不久,我發現了comp.lang.perl.misc,並且開始在上面回答一些我力所能及的問題。這就像是我給自己留的家庭作業。我的技術不斷進步,社群的反饋儘管有好有壞,但都非常及時迅速,我學到了更多Perl 以外的東西。最後,我找到了一個可以整日用Perl 程式設計的工作,但我仍然是公司裡唯一使用Perl 的人。這期間,我一直在comp.lang.perl.misc 上做著我的家庭作業。
偶然間,我得到了Randal Schwartz 的注意,他將我招至麾下,開啟了我的Perl 學徒之路。他邀請我參與Stonehenge Consulting Services 專案,我成為了一名Perl 講師,於是,我真正的Perl 講授工作開始了。講授意味著把自己掌握的東西解釋給別人,對於講的人來說,這是學習一門課程的最好方法。一段時間之後,我開始了關於Perl 的寫作,這與講課是類似的,不同的是,寫作需要規範的語法(大部分時候如此)和一個用於糾錯的編輯器。
於是,我所寫的這本《精通Perl》作為系列書籍的第三本,第一個問題出現了,前兩本《Perl語言入門》和《Perl 進階》我手頭都有,這兩本大概都有300 頁左右,如果需要限制在同樣的頁數,我如何將我多年的經驗全部塞進這薄薄的一本書裡呢?
一句話,我做不到。因此,我會把我認為你應該知道的都教給你,但是你仍需要學習其他的資源。正如工匠前輩們一樣,你不能只片面聽一個人的,還需要尋找其他的工匠大師,而這正是Perl 最棒的地方:每個問題都有許多不同的解決方式。其中一些大師寫就了非常棒的Perl 書籍,有和本書同一個出版社的,也有其他出版社的。因此,有些主題本書將不再重複,下面我會再談到這個問題。
成為大師意味著什麼
本書與《Perl 語言入門》和《Perl 進階》的側重點稍有不同,前兩本書更偏重於教程類,內容涵蓋Perl 語言的大部分細節,但是涉及程式設計的實踐內容只有很少一點。因此,本書有責任在這方面給予讀者更多。
相信購買本書的各位讀者都已經基本掌握了Perl ,那麼,閱讀本書將會鍛鍊你回答自我、發掘自我的能力,雖然這個過程比簡單地請教他人需要付出更多的努力,但真正的事實是,這樣在建立自身經驗的同時,避免了因為打擾別人耗費更多的精力。
雖然我沒有像Advanced Perl Programming, First Edition(《高階Perl 程式設計》,第1 版)和MasteringRegular Expressions(《精通正規表示式》)()這兩本書那樣,在書中涵蓋其他的語言,但是你自己應該學一些其他語言。這會激發你已有的Perl 知識,帶給你新的觀點,這些新觀點中一些會使你更加欣賞Perl ,而另外一些則會使你瞭解到Perl 的缺陷。
作為一名大師,你總有一天會遇到Perl 的某些缺陷。如果你沒有這樣一張列表,上面列舉著你最痛恨的關於Perl 的五件事,以及用於支援這五件事的事實,我敢說,學習Perl ,你可能做得還遠遠不夠;關於這一點,具體可以參見我的主題演講影片“My Frozen Perl 2011Keynote”()。這並不是Perl 本身的錯。所有的語言都是如此。對Perl 的精透過程就包含了對這些東西的瞭解,以及瞭解之後對Perl 的堅持,因為對於你的程式來說,Perl 的強大要遠遠比那些缺點有價值得多。正因為你能夠辯證地認知問題的兩個方面,做出明智的選擇,進而才能指導他人,而這樣的人便稱之為大師。
以上所有這些都在講如何成就大師之路,涉及工作、閱讀,以及和他人的交流。你做得越多,學得就越多。大師之路沒有捷徑。也許如你學習其他語言一樣,學Perl 時,語法學得很快,但這只是整段經歷中最小的一部分。即使你掌握了Perl 的大部分知識,你可能仍然需要花時間閱讀一些“元”程式設計書籍,這些書討論的是程式設計實踐,而不只是擺弄語法。這些書使用的也許不是Perl 語言,但為了讀懂它們,如我之前所說,你需要學習一些其他語言。作為大師,時刻保持學習。
成就大師之路需要你比學習計劃掌握得更多,比昨天的自己努力得更多,還要竭盡所能從其他人的經驗中汲取得更多。這不僅僅與你自己寫的程式碼有關,因為你還需要與許多其他作者的程式碼打交道。
這聽起來很難,但這就是成就大師之路。它值得你為之奮鬥!別放棄!祝你好運!
本書適用於哪些人
本書是《Perl 進階》的後續書籍,因此我假設你已經瞭解並適應了上一本書中的引用、物件和模組等概念。本書中有的地方我也會引用《Perl 進階》中的內容,屆時需要你重新整理一下相應的技能。
如果是直接從其他語言轉過來的,並且之前從未使用過Perl ,或者僅僅是簡單接觸過Perl,我建議你瀏覽一下《Perl 語言入門》和《Perl 進階》,以便掌握語言的基礎內容。但這樣,你可能有時會不認識來源於實踐和經驗的慣用詞彙。總之,我並不想告訴你別買這本書(嘿,我還得付房貸呢!),但這本書對你的作用可能並不如我計劃的那麼好,至少現在如此。
如何閱讀本書
我並不想編寫所謂的“保留曲目:更多Perl 功能”第三卷。我想教授給讀者屬於自己的Perl學習方法。我將帶你走上屬於你自己的成就大師之路,作為學徒,你需要依靠自己完成一些工作。有時這代表我會告訴你在Perl 文件中到哪裡去尋找答案(同時這也意味著我可以騰出地方談論一些其他話題)。
你不需要依照任何順序閱讀各章節,各章節內容並不是循序漸進的。如果某些內容你不感興趣,大可放心地直接跳過。
關於某個主題,如果你想了解更多,可以參見我在每一章末尾附上的參考引用。
你需要掌握哪些已有知識假設你已經瞭解我們所編寫的《Perl 語言入門》和《Perl 進階》中的所有內容。這裡的“我們”,指共同作者Randal Schwartz、Tom Phoenix 和我。
最重要的是,你應該瞭解以下主題,其中每一條都隱含了其他主題的相關知識:
使用Perl 模組
書寫Perl 模組
引數引用、子程式以及檔案控制程式碼
基本的正規表示式語法及其工作原理
物件導向Perl
如果要討論前面書中沒有的一些內容,我會適當解釋得深一些。如果涉及前面書裡已經講過的內容,我可能會再次強調,因為它們確實很重要。
本書包括在《Perl 語言入門》中學習了Perl 的基本語法,以及在《Perl 進階》中學習了模組和團隊開發的基礎知識之後,接下來你需要學習一些Perl 術語,以及如何為使用者編寫無須幫助就能自主使用的可擴充套件應用程式。
本書會包括一些你在前兩本書中已經見過的內容,但是深度更深。正如我們在《Perl 語言入門》中說過的,有時我們會用善意的謊言來簡化細節,從而使你儘快進步,避免陷入困境。現在,是時候在困境中稍微折騰一下了。
但是,不要把我所有的話當成絕對的真理。世界上有幾百萬名Perl 程式設計師,他們都有自己的做事方法。Perl 的成就大師之路有時需要你閱讀相當數量的Perl 程式碼,即使有些你永遠也用不到。我會盡力說服你不要去幹那些我認為的傻事,但那只是我的個人觀點。因為你努力想要成為一名優秀的程式設計師,你的知識儲備永遠需要比實踐中用到的更充裕。有時我會展示一些不建議你使用的東西,但我知道,很可能你又會在其他人的程式碼裡看到它們。唉,這個世界並不完美。
程式設計並不全都是往程式碼裡新增或修改新功能。有時要抽出部分程式碼,檢測、觀察它神奇的執行過程。有時則需要你剔除不必要的程式碼。程式設計實踐並不僅僅是建立應用程式。它還涉及對程式碼的管理和爭論。我還會展示一些技術,並非用於我們的開發工作,而是用於分析。
本書不包括
經過和編輯們的討論,我們決定不再重複那些其他書本已經充分介紹過的主題。你也需要從其他大師那裡學習,我真的不想讓本書佔用你書架上不必要的空間。忽略這些主題不但讓我省了不少事,節省下來的空間還能用於其他更多的東西,一箭雙鵰。無論如何,你應該已經讀過那些書了。
本書忽略這些主題並不是說你也可以忽略學習它們,在合適的地方,我會指給你相應該看的書。我在附錄A中列出了一些書,我認為你應該在精通Perl 的路上把這些書收入你的書庫。它們都是由其他Perl 大師寫就的,每一本都有你值得學習的東西。在大多數章節最後,我還為你列出了其他一些資源。真正的大師從不停止學習。
不過,既然你已經讀到這裡了,那麼無論出於何種原因,我就簡單列出我將明確忽略的主題:Perl 的內部機制、Perl 嵌入、執行緒、最佳範例、物件導向程式設計、原始碼過濾器和海豚(這是一本關於“海豚安全(dolphin-safe)譯註1”的書)。
本書結構
對本書內容範圍以及寫作目的的介紹。
第1章,高階正規表示式
進一步介紹正規表示式的特性,包括全域性匹配、環視結構(lookarounds)、可讀正規表示式,以及正規表示式除錯。
第2章,安全程式設計技術
本章介紹一些如何避免程式設計問題的常用技術,包括汙點檢測(taint checking)和一些常見陷阱(gotchas)。
第3章,Perl 偵錯程式
簡單介紹Perl 偵錯程式,如何寫出你自己的偵錯程式,以及如何使用第三方偵錯程式。
第4章,Perl 效能分析
在你付諸行動改進Perl 程式之前,首先找出改哪裡,改什麼。
第5章,Perl 基準測試
指出哪種實現方法在時間、空間以及其他指標下的表現更好,還有發現這些數值真正意義的一些注意事項。
第6章,清理Perl 程式
使用Perl::Tidy 模組或Perl::Critic 模組排布別人的程式碼(或者甚至是你自己寫的程式碼),使其更具美觀性和可讀性。
第7章,符號表和Typeglob
學習如何使用Perl 追蹤包變數,如何將這一機制運用於某些強大的Perl 魔法。
第8章,動態子程式
實時定義子程式,幫助程式式程式設計設計轉敗為勝。摒棄迭代資料,轉而遍歷子程式列表,使你的程式更高效,更易於維護。
第9章,修改和提升模組
免於編輯原來的程式碼就能修復程式碼,這樣你就能輕鬆回到原來的程式碼。
第10章,配置Perl 程式
讓你的使用者不用接觸程式碼就可以配置程式。
第11章,檢測和報告錯誤
學習如何讓Perl 報告錯誤,如何檢測Perl 無法報告的錯誤,以及如何將這些訊息通知給使用者。
第12章,日誌
透過使用一個極其靈活而又強大的日誌工具包Log4Perl ,讓你的Perl 程式隨時向你彙報情況。
第13章,資料持久化
儲存資料以備稍後其他程式使用,或供同一程式的下次執行時使用,又或者以文字方式透過網路進行傳輸。
第14章,使用Pod
將Perl 特有的POD 文件翻譯成其他任何你喜歡的格式,並進行測試。
第15章,位操作
使用位運算子和位向量高效儲存大量資料。
第16章,繫結變數的魔法
不只是使用,而是創造你自己獨有的Perl 基本資料型別,完成任何你想要的操作。
第17章,模組即程式
以模組的方式編寫程式,充分利用Perl 模組的發行、安裝和測試工具的所有優點。
附錄A,延伸閱讀
探索這些資源,繼續你的Perl 學習。
附錄B,brian 的Perl 問題解決指導手冊
我最流行的手把手教程可以幫你解決任何Perl 問題。跟隨教程,提高你解決問題的技巧。
本書所使用的約定
以下是本書所使用的排版約定:
斜體(Italic)
表示新的術語、網址(URL)、電子郵件地址、檔名和副檔名。
等寬字型(Constant width)
用於程式清單及段落中引用的程式元素,如變數名和函式名、資料庫、資料型別、環境變數、宣告和關鍵字。
等寬粗字型(Constant width bold)
表示命令或由使用者輸入的文字。
示例程式碼的使用
補充材料(示例程式碼、練習等)可在下載。
本書的目的是幫助你完成工作。一般來說,如果示例程式碼是隨本書提供的,那麼你可以在你的程式和文件中使用它。你不需要與我們聯絡來獲得許可,除非你直接複製大部分的程式碼。例如,編寫程式時使用了本書中的幾段程式程式碼不需要許可。銷售或分發O’Reilly 書籍中例子的CD-ROM 是必須經過許可的。引用本書及本書中的示例程式碼來回答問題不需要許可。將本書中大量的示例程式碼整合到你的產品文件中則需要獲得許可。我們很感謝你在引用的時候保留出處資訊,但是不強制。出處資訊通常包括書名、作者、出版社以及國際標準圖書編號(ISBN)。例如:“《精通Perl,第2 版》,作者brian d foy (O’Reilly)。
Copyright 2014 brian d foy,978-1-449-39311-3。”
如果你在使用示例程式碼時感到超出了合理的使用範圍,或是屬於以上某種需要授權的情況,請隨時聯絡我們permissions@oreilly.com。
Safari® Books OnlineSafari Books Online()是一個釋出來自全球技術和商業領域的頂尖作者寫的書和影片等優質內容的按需數字化圖書館。
技術專業人士、軟體開發者、網站設計師及商業和創意專業都用Safari Books Online 作為他們的主要研究、解決問題、學習和認證培訓資源。
Safari Books Online 提供了一系列產品及針對組織、政府和個人不同的定價方案,訂閱者可以訪問到成千上萬的圖書、培訓影片及出版前的手稿,這些內容都可以從出版社,如O’ReillyMedia、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBMRedbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones& Bartlett、Course Technology 等資料庫中搜尋而得到,想了解更多關於Safari Books Online的資訊,請線上訪問我們。
聯絡我們
對於本書的評論或問題,請聯絡出版商。
美國:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區西直門南大街2 號成銘大廈C 座807 室(100035)
奧萊利技術諮詢(北京)有限公司
我們為本書設定了一個網頁,在該網頁中列出了勘誤表、示例和所有附加的資訊,你可以從以下網址訪問該頁面:。
評論或詢問與本書相關的技術問題也可以傳送郵件到bookquestions@oreilly.com。
瞭解更多關於本書、課程、會議和新聞的資訊,請訪問我們的網站:。
我們的Facebook:
我們的Twitter:
我們的YouTube 影片:
致謝
在寫本書第1 版的那一年,很多人給了我幫助。Mastering Perl 郵件列表的讀者在我初稿期間給了我持續不斷的反饋,其中發來的大部分建議我都採納了,這些建議來自Andy Armstrong、David H. Adler、Renée Bäcker、Anthony R. J. Ball、Daniel Bosold、Alessio Bragadini、PhilippeBruhat、Katharine Farah、Shlomi Fish、Deyan Ginev、David Golden、Bob Goolsby、Ask BjørnHansen、Jarkko Hietaniemi、Joseph Hourcle、Adrian Howard、Offer Kaye、Stefan Lidman、EricMaki、Joshua McAdams、Florian Merges、Jason Messmer、Thomas Nagel、Xavier Noria、ManuelPégourié-Gonnard、Les Peters、Bill Riker、Yitzchak Scott-Thoennes、Ian Sealy、Sagar R. Shah、Alberto Simões、Derek B. Smith、Kurt Starsinic、Adam Turoff、David Westbrook 和Evan Zacks。
還有更多的人為第1 版提交了勘誤表。我十分確信,正是他們的詳細審查始終讓我保持在正確的道路上。
Tim Bunce 在效能分析章節給了我非常友善的建議,包括DBI::Profile 模組等內容,而Jeffrey Thalhammer 則用他的Perl::Critic 模組大大地幫助了我目前的開發工作。Perrin Harkins、Rob Kinyon 和Randal Schwartz 自始至終都在幫我錄入第1 版的手稿,我很高興選擇他們作為我的技術評審,他們的意見總是十分準確和恰當的。第2 版時,MatthewHorsfall 和André Philipp 的錄入工作則對我意義重大。
儘管可能會害怕我沒完沒了的滋擾,但Allison Randal 仍然為本專案提供了非凡的Perl 建議與編輯指導。還有一些來自O’Reilly 其他好友的幫助,他們的付出遠比一位作者創作一本書要多得多。因此,下次你碰見某一位O’Reilly 僱員的時候,一定要替我感謝他(她)。最後,我要感謝Perl 社群,多年來,從我成為其中一員時起,社群一直對我無比的友善、支援。有如此多偉大的程式設計師和管理員幫助我不斷成為更加優秀的程式設計師,而我希望謹以此書,同樣能夠幫助那些剛剛加入Perl 的人們。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-1470178/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 精通iOS開發(第5版)圖2-11iOS
- 專家審讀第7期——《精通Android 4》Android
- perl
- 《HTMLCSSJavaScript網頁製作從入門到精通第3版》——第01章 HTML基礎HTMLCSSJavaScript網頁
- perl Statistics::Descriptive Perl 的統計模組
- perl教程
- 《HTMLCSSJavaScript網頁製作從入門到精通第3版》——第02章 HTML基本標記HTMLCSSJavaScript網頁
- 【圖靈贈書】《精通Linux(第2版)》點評贈書圖靈Linux
- 精通 R plot—第1部分:顏色,圖例和線
- Perl語言學習(四)Perl控制結構
- 《Modern Perl》前言--包含了Perl的安裝使用
- perl-Time-HiRes安裝與perl衝突
- postgresql從入門到精通教程 - 第36講:postgresql邏輯備份SQL
- C# 小白菜鳥從入門到精通(第3版)教程C#
- perl指令碼指令碼
- perl 特殊字元字元
- perl dbi oracleOracle
- perl 基礎
- perl DBD::oracleOracle
- perl 安裝
- 100天精通Python—第34天:正規表示式大總結Python
- 《HTMLCSSJavaScript網頁製作從入門到精通第3版》——2.7 水平線HTMLCSSJavaScript網頁
- Nginx通過內建的Perl模組執行Perl程式Nginx
- Perl Catalyst 倒出 ExcelExcel
- Perl常用語法
- perl資料操作
- perl 命令列模式命令列模式
- 學習perl(6)
- 學習perl(5)
- 學習Perl(4)
- 學習perl(3)
- 學習perl(2)
- perl檔案操作
- perl處理中文
- 初步理解了perl
- perl字串函式字串函式
- perl中文網站網站
- perl 處理HTMLHTML