perl  

May 26, 2016 • Michael Chen

隨著 Python、Ruby、Groovy 等腳本語言的掘起,Perl 的影響力不如以往;近年來 Perl 相關書籍數量也較先前減少,不過,我們很慶辛,在 2016 年,仍然有新的 Perl 相關圖書,就是本文將介紹的 chromatic 的 Modern Perl, 4th edition,這篇文章,將會帶著各位瀏覽一次這本書籍。

首先,雖然這本書大部分內容在討論 Perl 的語法,但是這本書的程式碼相對簡短精實,對於一些新的用法,有時候不會特別去說明,而會直接使用;而且,這本書不會解釋程式設計的基本概念,比如變數、條件式、迴圈等,而會直接討論進階的 Perl 語法;對於初學者,可能會覺得本書的敘述相對晦澀難讀。如果是 Perl 的初學者,希望能夠按部就班的學習,還是比較推薦 Perl 學習手冊 (Learning Perl) 和 Perl 進階手冊 (Intermediate Perl) 這兩本經典教程。

本書分為以下數個部分:

本書一開始就教我們如們用 perldoc 工具和 CPAN 網站查文件,對於程式設計師來說,學會利用程式的文件自我學習,是相當重要的。接下來談到 Perl 的表現力和語境,對於寫過一陣子 Perl 的程式設計師,會相當有感覺。本段最後則討論到 Perl 的預設變數。之後,討論到 Perl 相關資源。本段的重心在 CPAN 的使用,藉由這些第三方函式庫,大大地增加 Perl 的功能。另外,雖然本書沒提到 plenv 專案 (https://github.com/tokuhirom/plenv),筆者大力推薦這套 Perl 版本管理軟體。

接下來的章節,提到 Perl 的語法。除了基本的語法介紹外,本書也介紹一些相對進階的議題,像是 UTF-8 等。不過,本段行文節奏相對快速,程式碼片段也相對簡短,對於初學者來說,可能會吃不消;把這個段落當成是復習語法,可能比較好。然後,提到操作子,這個段落內容較少,應該很快就能讀完。在函數的段落中,除了基本的函數相關語法,也提到一些較進階的主題,像是 function signature、Carp 模組、tail call、anonymous function 等。如果讀者對 Perl 的 functional programming 有興趣,可另外閱讀 Higher-Order Perl,裡面有許多相關的主題。在 regex 的段落中,原作者以較快的步調將 regex 講解一次,另外,在最後面提到 smart matching 的議題。

在物件的段落,原作者未對原本的 Perl 物件做太多的介紹,而直接切入 Moose 這套新的 Perl 物件系統;但是,筆者仍建議稍微將原來的 Perl 物件有一些基本的了解後,再切入 Moose,比較會知道那些部分是 Moose 的新語法,而不至於搞混。這本書對 Moose 的介紹相當完整,可以先將本段落看完後,再回頭看 Moose 的官方文件,會比較容易了解。另外,在實務上,如果只會用到基本的物件導向語法,可以用 Moo 這個 Moose 相容的函式庫取代原有的 Moose,其檔案較小,安裝較快速。

接下來的段落,原作者提到一些以 Perl 開發軟體的建議,其實不僅僅適用 Perl,而是一些通則,可以細細品嘗。然後,提到例外處理,由於 Perl 原來的相關方案較原始,故作者提供一些替代性的方案。最後則提到一些實用的 pragmas,可視需求加入自己的程式碼中。再來,談到實務上會碰到的一些狀況,像是撰寫測試程式、警告訊息處理、檔案 I/O 處理等,以及一些進階的議題,包括撰寫模組、程式碼生成、taint 模式等。本段落的主題相當值得一看。之後,提到一些相對進階的寫法,這些不是必需的,但對學習 Perl 有相當的幫助。之後提到一些應該避免的寫法,可以讀過一次,並改掉這些習慣。最後的段落,簡單提到一些 Perl 的模組,有興趣的程式設計師,可再自行挖掘更多函式庫和框架的用法。

雖然筆者在近年來較少使用 Perl 做為開發用語言,然而,筆者仍然十分高興有這本書的問世,讓 Perl 語言也能與時俱進,而避開使用一些老式的用法。