精通Perl(第2版)

精通Perl(第2版)

《精通Perl(第2版)》是2015年3月電子工業出版社出版的圖書,作者是Brian D Foy。

內容簡介

《精通Perl(第2版)》作者Brian D Foy 用他生動的第一人稱視角向各位讀者介紹了精彩的Perl高級語言知識以及豐富的實戰工具與實用技巧。《精通Perl(第2版)》各章的內容相對獨立,您完全可以根據自己的興趣或需要直達你所需要的章節。

《精通Perl(第2版)》的讀者主要面對具有較多經驗的Perl 編程人員。閱讀本書前,建議閱讀本書的姊妹篇《Perl 語言入門》和《Perl 進階》。作者在這本書里針對調試、最佳化、錯誤和日誌等方面均有深入解析,也揭示了Perl 中如綁定變數、持久化存儲等各種魔法般的特性和功能的實現細節和用途。書中還對如何開發、調試自己的模組,以及如何做出更適合使用的模組做了詳細介紹。

總之,本書可以作為讀者在向Perl 高手進階過程中的一個助力器,希望讀者能在閱讀過程中深入思考,加入自己的理解,用Perl 來完成一件件神奇的事情。

編輯推薦

精通Perl(第2版) 精通Perl(第2版)

- 探索高級的正則表達式功能

- 如何避免程式的常見安全問題

- 對 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,業餘時間都占滿了,所以當時對是否要接下翻譯工作有些猶豫。我和LCTT的核心成員之一劉宸宇(tinyeyeser)商量了一番,感覺這個事情還是很有意義的,所以我們兩個共同接下了對這本書的翻譯工作。

王興宇

我要把這本書獻給我剛出生的小天使,翻譯完交稿不到10天,她便降臨到我的世界裡,成為了我生活中不可缺少的一部分。

一直以來,我喜歡翻譯對話、評論、調侃性質的技術部落格等文章,鍾情於感受那種面對面交流的感覺;而技術書籍這種相對較為正式的翻譯,對於我來說,反而是件痛苦的事,哪怕只翻譯半本(前言、附錄及前8章)。但是當我真正深入本書,與brian d foy 正面交鋒時,我發現,這不正是我所熟悉的面對面的對話嗎?是的!不同於一般的技術書籍,大師的行文,幾乎所有的主觀句子都是以第一人稱“I”開頭,這就好像他坐在你面前,手把手講授一樣,生動、客觀、幽默、立體!因此,我和王興宇(wxy)在翻譯的時候,把大部分“I”翻譯成了“我們”,這樣既忠於作者的語境,也更貼合中國課堂上老師的講課習慣。

馮德倫的電影《太極》里有一句詞:“人這一輩子,乾好一件事就足夠了”。我自認為不是一個有長性的人,一件事情很難堅持做到最好,總是覺得60分及格就可以了。因此,翻譯過程中一度出現了厭煩情緒,但我很高興自己成功堅持了下來。我要感謝幾個月來,整個翻譯過程中一直陪伴我督促我的媳婦兒,她懷著身孕,每當我消沉的時候,都會在我耳邊給予

我支持和鼓勵,“翻譯完了嗎?翻譯完了嗎?趕緊翻譯啊!好好翻譯啊!”每個成功男人的背後,都有一個偉(lao)大(dao)的女人。我愛這個嘮叨的女人!

劉宸宇

Perl 作為老牌的程式語言,其成熟度和套用廣泛令人稱道,也是系統管理員和科研工作所必備的技能之一,因此,我們希望這本書的再版翻譯,能夠幫助讀者進一步掌握Perl 語言的套用,也希望能夠為開源社區反哺更多的智慧。

將來,如果有機會,我們也希望這本書能夠以某種開源方式,分享給社區,並接受社區的不斷反饋和完善,成為一本真正有生命力的書籍。

一本書的出版,其實要感謝很多人,雖然俗套,但是我們覺得依然有必要,占用一點小小的空間感謝他們:

感謝我們的家人的支持。

感謝我們的同事和領導的支持。

感謝編輯付睿老師的信任和委託。

感謝編輯李利健老師的辛勤審校。

感謝所有不知名的工作人員的辛勤工作。

王興宇&劉宸宇

作者簡介

Brian D Foy是一名多產的 Perl 培訓講師和作家,其出版的 The Perl Review 幫助人們通過教育、諮詢、代碼審查等方面來學習和使用 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。”

如果你在使用示例代碼時感到超出了合理的使用範圍,或是屬於以上某種需要授權的情況,請隨時聯繫我們。

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的信息,請線上訪問我們。

聯繫我們

對於本書的評論或問題,請聯繫出版商。

我們為本書設定了一個網頁,在該網頁中列出了勘誤表、示例和所有附加的信息,你可以訪問網站。

評論或詢問與本書相關的技術問題也可以傳送郵件。

致謝

在寫本書第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 的人們。

相關詞條

熱門詞條

聯絡我們