2009年3月3日 星期二

一般人對於 Perl 的誤解

* 此篇文章只是澄清一般人對 Perl 的誤解,不是說 Perl 有多好其他語言有多差,請勿誤會,語言只是工具,對於 Perl 的缺點當然要列的話當然也不少。

看見有人在 lukhnos 的這篇 『學 Python: 兼談成人的語言習得』有人回應指出 "Perl我覺得很大程度是靠regex在撐" 這句話,我想,順便對這樣的誤解提出釐清一下。

這就是大部分的人對 Perl 的誤解,因為對 Perl 了解的不夠深,以及大部分 Perl 的流言。

我真正踏入 Programming 這塊的時間並不長,但是也走馬看花學了一些語言,然而在 Ruby, Python, Perl 等語言中使用大量的 Perl ,其實有很多原因。
一開始學習 Perl,只是將他當作相當方便的 Scripting Language 使用,但是跟隨 clkao 接觸 Jifty 以及閱讀許多模組的 Code,使我對 Perl 的認知便不再是如此。

Perl 作為一個 Very High Level Programming Language 這樣的方便性,使他非常容易被用來 Scripting. 但是 Perl is not just for `Scripting`,Perl 除了在 Scripting 上的應用之外,也被拿來開發網路應用程式、網頁框架、系統管理、剖析器 (Parser) 甚至生物科技(請參見 BioPerl) 等應用。所以, Perl is not just for `Scripting`.

1. 有些人認為 Perl 寫出來的程式是相當骯髒
事實並非如此,而是看每個人的 Coding Style 而有所不同,由於 Perl 提供了語法的多變性質,所以無法讓人很難寫出不難看的 Code。而寫 Perl 寫的好的人,則是能將 Perl 作為一個相當優雅的語言使用。
對於 Coding style 相當差的人,用 python 或 ruby 寫,可能沒辦法寫出很難看的程式,以 python 來說, syntax 對 code 的 indentation 做了限制,必須照 Indentation 撰寫程式,否則 Interpreter 就不聽你的話,而 Perl 是 free-form 的語言,你能夠以非常自由的風格撰寫。

2. 有些人認為 Perl 完全只是在靠 Regular Expression 在撐:
事實並非如此。許多人使用 Perl 的原因,不外乎是因為 Perl 提供了 CPAN ,可以讓 Hacker 可以 DRY (Don't Repeat Yourself). 以及 Perl 的本質 -- 條條大路通羅馬 ( TMTOWTDI ) ,因此對付一項問題,你可以選擇各種不同的模組來解決問題,以及更多種不同的寫法來實做。 另外,Perl Syntax 所提供的多變性 - 對 function 的呼叫可不加上圓括號,提供 Closure, Prototype 等功能,讓我們可以利用 Perl 來製作各種 "寓言",而 Regular Expression 只能算是 Perl 強而有力的工具之一而已。

舉例來說 Object::Declare 或是 Jifty::DBI 的 Schema 都使用了這種特性來讓 Perl Programmer 可以很優雅的撰寫程式。

再來是 Perl 的 syntax sugar , qq , qr , qw 等 term 提供了更方便的方式來建構字串、串列以及雜湊、正規表達式。

順帶一提,Ruby 便是從 Perl 這取出部份的便利性,再加上完整的 Object ,相對於 Perl 對 Object 實做的 lack ,所以也有不少 Perl Hacker 跳槽去 Ruby 。

順便引用 clkao 於 ptt 的一篇 『 關於 Perl 已死的一些迷思』,提出 OSCON, Tim Bunce 的一場 talk 的重點:
http://tinyurl.com/6r89go

在今年的 OSCON, Tim Bunce (DBI 的作者) 有一個場 talk: Perl Myths

簡單來說,關於 "perl 已死" 的迷思部份, 重點如下:

* 不紅不代表沒有人用或沒有相關工作的市場
* 工作需求的統計數據顯示, perl web developer 僅次於 php developer
* perl software engineer 高於 {python,ruby} software engineer
* "perl developer" 遠高於 {python,ruby} developer