[Perl] 程式設計教學:簡介| 開源技術教學網

文章推薦指數: 80 %
投票人數:10人

撰寫新的應用程式. Perl 的優缺點. 在類Unix 系統中,和文字處理高度相關的命令列工具有 grep(1) ... 由MichelleChen撰寫。

最後修改於西元2022年01月30日 開源教學Perl程式設計簡介 前言 近年來,Perl的確在式微中。

在Perl、Python、Ruby三個性質接近的命令稿語言中,許多新的應用都會優先發表相對應的Python套件。

反之,很少開發團隊會主動寫新的Perl套件。

每隔一陣子,就會有某篇部落格文章說「Perl已死」,現在仍然值得學Perl嗎? Perl在現代的角色 筆者認為,即使到了21世紀,Perl仍然可以學,但我們對Perl的視角略為調整。

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

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

目前來說,可以優先學習的特性如下: 單行程式(one-liner),這是在命令列直接使用Perl程式的方式 撰寫簡短、重用性低的命令稿 取代shell命令稿 執行一些現有的函式庫或應用程式 相對來說,以下特性優先次序較低: 撰寫物件導向程式 撰寫新的套件 撰寫新的應用程式 Perl的優缺點 在類Unix系統中,和文字處理高度相關的命令列工具有grep(1)、sed(1)、awk(1)、perl(1)、ruby(1)。

在這些工具中,AWK、Perl、Ruby具有處理欄位(column)的能力,也具有完整的程式語法,算是兼具命令列工具和程式語言特性的軟體。

由於perl可以寫出等效而略長的grep、sed、awk指令,而Perl的正規表示式特性又比這些工具強;筆者的sed和AWK老是學不好,就是因為筆者知道自己可以撰寫等效的perl指令,省下學習重複的工具的心力和時間。

更深入的討論可看StackOverflow上的相關討論串。

ruby刻意在語言特性上師法perl,理論上Rubyone-liner可以做到和Perlone-liner差不多的功能,但Perl某些在工程上不利的特性、像是弱型別、預設變數值等,對於寫oneliner反而好用,而且Perl的歷史比Ruby久,相關的資料比較好找。

另外,Perl在大部分的類Unix系統上是預裝的軟體,預裝Ruby的機率相對少。

筆者並不覺得Ruby本身有什麼問題,只是在寫oneliner上沒有特別優勢。

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

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

Perl的建議用途 綜合以上想法,我們將一些重用性低的小型任務用Perl撰寫,這時不太需要去在意工程性的議題;需要團隊合作的程式專案,則改用其他更適合的工具。

在這個部分,Perl和Python的功能是重疊的,讀者可自行選擇喜好的工具。

由於Perl可以和系統上的命令列工具互動,在一些情境中,Perl也可以用來代替shell命令稿。

用Perl命令稿代替shell命令稿的好處是Perl在程式語言方面的功能比shell來得豐富、有串列和雜湊可用、在字串處理上也會更容易。

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

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

由於Perl的歷史悠久,有一些軟體會用Perl撰寫,學習Perl就可以立即使用這些現有的方案。

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

相對於前述優點,Perl在工程性較弱,對於需長期使用的應用程式,Perl可能不是最佳的選項,這時候或許可以考慮和Perl特質相近的Python。

因此,對於和撰寫應用程式或函式庫相關的特性,就不用急著去學,那天有需要時再補強即可。

迎接Perl7的到來 Perl在大版本號來到7之後,雖然語法和Perl5大抵上雷同,但會有更適合於現代的預設設置。

也就是說,在盡力避免Perl社群分裂的前提下完成Perl的現代化工程。

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

本文目錄 前言Perl在現代的角色Perl的優缺點Perl的建議用途迎接Perl7的到來 回頁頂 回首頁



請為這篇文章評分?