位元詩人 [Perl] 程式設計教學:簡介

Perl
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

近年來,Perl 的確在式微中。

在 Perl、Python、Ruby 三個特性、目標領域接近的命令稿語言中,許多新的應用都會優先發表相對應的 Python 套件。反之,很少開發團隊會主動撰寫新的 Perl 套件。

每隔一陣子,就會有某篇部落格文章說「Perl 已死」,現在仍然值得學 Perl 嗎?

Perl 在現代的定位

筆者認為,即使到了 21 世紀,Perl 仍然可以學。

但我們對 Perl 的視角略為調整。我們將 Perl 視為一種具有程式語言的命令列工具,而非一種通用型程式語言。

在這種思維下,我們僅需學習一部分的 Perl 特性,就足以滿足我們日常任務的需求。相對來說,有些特性可以暫時不學,需要時再補足即可。

目前來說,可以優先學習的特性如下:

  • 單行程式 (one-liner),這是在命令列直接使用 Perl 程式的方式
  • 撰寫簡短、重用性低的命令稿
  • 取代殻程式 (shell) 的命令稿
  • 和文字處理 (text processing) 相關的功能
  • 執行一些現有的函式庫或應用程式

相對來說,以下特性優先次序較低:

  • 撰寫物件導向程式
  • 撰寫新的套件
  • 撰寫新的應用程式

Perl 的優缺點

Unix 和文字處理高度相關的命令列工具有 grep(1)sed(1)awk(1)perl(1)ruby(1)。在這些工具中,AWK、Perl、Ruby 算是兼具命令列工具和程式語言的軟體。

perl 可以寫出等效而略長的 grepsedawk 指令,而 Perl 的正規表示式特性又比這些工具強。筆者的 sed 和 AWK 老是學不好,就是因為可以撰寫等效的 perl 指令,省下學習其他工具的心力和時間 (出處)。

理論上 Ruby 單行程式可以做到和 Perl 單行程式差不多的功能,但 Perl 某些在工程上不利的特性、像是弱型別、預設變數值等,對於寫單行程式反而好用。而且 Perl 的歷史比 Ruby 久,相關的資料比較好找。

另外,Perl 在大部分 Unix 上是預裝的軟體,預裝 Ruby 的機率相對少。筆者並不覺得 Ruby 本身有什麼問題,只是在寫單行程式上沒有特別優勢。

Perl 的語法傾向於易寫難讀,對於熟悉 Perl 的程式設計者,可以流暢地使用許多 Perl 的內隱規則寫出相當精簡的 Perl 程式。

但對於團隊工作來說,過度地使用內隱規則反而不利於維護程式碼,不一定每位團隊成員都熟悉 Perl 的內隱規則。

Perl 的建議用途

綜合以上想法,我們將一些重用性低的小型任務用 Perl 撰寫,這時不太需要去在意工程性的議題。

需要團隊合作的程式專案,則改用其他更適合的工具。在這個部分,Perl、Python、Ruby 的功能是重疊的,讀者可自行選擇喜好的工具。

由於 Perl 可以和系統上的命令列工具互動,Perl 也可以用來代替殻程式命令稿。前者在程式語言方面的功能比後者來得豐富,有串列和雜湊可用、在字串處理上也會更容易。

使用 Perl 取代殻程式的壞處則是 Perl 命令稿會比等效的殻程式命令稿寫起來長一些,讀者可視情形自行選擇適合的工具。

在 Windows 上,也可用 Perl 取代 Batch。

由於 Perl 的歷史悠久,有一些軟體會用 Perl 撰寫,學習 Perl 就可以立即使用這些方案。一些實例像是 BioPerl 或是 E Utilities

在上述這兩個例子中,前者是 Perl 套件,要撰寫 Perl 命令稿才能使用。後者則是應用程式,不需要學習 Perl,只要把 Perl 視為一種運行環境 (runtime environment) 即可。

相對於前述優點,Perl 在工程性較弱,對於需長期使用的應用程式,Perl 可能不是最佳的選項。這時候可以考慮 Python 或 Ruby。因此,對於和撰寫應用程式或函式庫相關的特性,有需要時再補強即可。

迎接 Perl 7 的到來

Perl 在大版本號來到 7 之後,雖然語法和 Perl 5 大抵上雷同,但會有更適合於現代的預設設置。也就是說,在盡力避免 Perl 社群分裂的前提下完成 Perl 的現代化工程。

待更多 Perl 7 的資訊出現,筆者也會更新本系列文章的內容。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。