Perl 語言在 Web 程式設計的發展過程中,佔有舉足輕重的地位,尤其是在 ASP、PHP 尚未興起之前,所有使用者與伺服器的溝通,完全是靠 CGI(Common Gateway Interface)來達成,而這些 CGI 背後的程式語言,至少有一半以上是靠 Perl 來完成使命的。Perl 是一種底稿式語言(Scripting Language),因此和一般其他底稿式語言(如 MATLAB、JavaScript、VB、Tk\Tcl、Unix Shell)的特色類似,具有下列特色:
Perl 是由 Larry Hall 所精心發展出來的語言,其原名是「Practical Extraction and Report Language」,由此可見 Perl 原先的主要功能就是對文字進行各式各樣的處理,並產生所需的報表。Perl 由於對文字處理的功能非常強大,因此所產生的程式碼非常精簡,對於 Perl 程式老手來說,Perl 程式就如同 Pearl (珍珠)一般,字字珠璣,一行程式碼可抵數十行(甚至數百行)的 C 程式碼。但對初學者來說,這些老手所寫出來的程式,雖然短短數行,但可能就像天書一樣,完全不知所云,因此有人又戲稱 Perl 是「Pathologically Eclectic Rubbish Lister」。舉例來說,下面是一行典型的 Perl 程式碼:
- 資料型態定義較鬆散,如字串和數值可自動互換。
- 直譯式語言,因此不需要編譯(Complie),但須依賴 Perl 直譯器(Intepreter)來執行程式碼。
- 由於是直譯式語言,因此程式碼執行效率較差。
- 由於不需要經過編譯程序,因此可以進行快速雛形設計(Rapid Prototyping)。
$html=~m#<\s*a\s+href\s*=\s*"?(.*?)"?\s*>(.*?)<\s*/\s*a\s*>#gi; 看起來是不是很像使用 Modem 撥接上網時,偶而會出現的一堆亂碼?(上述程式碼的功能是從一段 HTML 文字中找出可連結的網址,會在本章後面幾節詳述。)
Perl 之所以受到歡迎,可以歸納出下列原因:
所有有關 Perl 的相關資訊(含在各種作業平台的可執行檔及原始碼),都可在 CPAN(Comprehensive Perl Archive Network)網址獲得:
- 軟體完全免費。
- 可用於不同作業平台,如 Unix、Win95/98/NT/2000、Mac。
- 強大的文字處理能力,特別適用於處理網頁資料。
- 在 Unix 社區中已被廣泛使用良久,因此到處可以找到免費好用的程式碼。
http://www.perl.com/CPAN/ 此網址也包含了各式各樣的模組(Module),可用來延伸基本 Perl 的功能。在 CPAN 的 Perl,通稱為「標準版本」(Standard Distribution),包含了對各種作業平台的支援。另外,微軟也看到了 Perl 的魅力,因此委託 ActiveState 公司開發在 Win32 的專用 Perl,並附在 NT Resource Kit。由 ActiveState 公司所開發的 Perl 也是完全免費,可由下列網址獲得:http://www.activestate.com 此 Perl 版本通稱「Win32 版本」(Perl for Win32),它的功能和「標準版本」是大同小異,但由於「Win32 版本」是由微軟支援開發,所以和微軟視窗系統的配合度較高,因此具有其他特異功能,例如 OLE Automation(和其他視窗應用軟體溝通)、ActiveX Scripting(取代 JavaScript 和 VBScript 在 Web 瀏覽器及伺服器的功能) 等等。Perl 原先只是所謂的「Glue Language」,用來處理零零總總的小事情,但現在已不可同日而語,其應用面可列出如下:
- CGI 程式設計
- Web 機器人:可大量收集網頁,以建立網頁搜尋引擎(Search Engine)。亦可建立 Web 代理人程式(Web Agents),以搜尋個人所需的特定資訊。
- Web 連結驗證:驗證一個網頁的連結是否無誤。
- HTML 格式驗證:驗證一個 HTML 網頁是否符合所有的 HTML 標準語法。
- ODBC 資料庫連結:使用 ODBC 的方式和資料庫進行資料存取。
- ActiveX Scripting:可取代 JavaScript 和 VBScript 在 Web 瀏覽器及伺服器的功能。
- OLE Automation:經由視窗標準程序,可和其他視窗應用軟體溝通。
- NT 視窗系統的管理:如更改登錄(Registry)、事件登錄(Event Log)、建立使用者帳號等。
- 網路程式設計:可進行底層的 Socket Programming。
- 圖形使用者介面設計:可和 Tcl/Tk 整合,產生複雜的圖形使用者介面。
Perl