發新話題

Perl黑客需要知道的10件事

Perl黑客需要知道的10件事

Perl是專家級的系統管理員的首選腳本語言,但是它的作用遠遠不止這些。作為一個設計用於文件和文本處理的語言,除了其他多種用途之外,它還極其適用於UNIX系統的管理、Web編程,以及數據庫編程。

作為一門最容易的編程語言,它非常容易上手,能夠為簡單的任務編寫出高效的代碼,因此Perl很容易就吸引了新用戶,並成為他們完成自己任務的一個常用的重要工具。在正式開始討論Perl編程之前,有一些你需要知道的東西,它們能夠讓你在編寫代碼和向Perl專家求助的時候使編程工作更輕鬆。

1.Perl不是首字母縮寫

Perl有的時候被認為是實用型提取和報告語言(Practical Extraction and Report Language),因為它在提取數據和使用該數據創建的報告上十分好用。它也被滑稽地叫做變態電子垃圾列表程序(Pathologically Eclectic Rubbish Lister),因為你在使用它一段時間之後就會體會出這一點。這兩種說法都是「官方的」,也都是正確的,但是這門語言不是PERL。Perl這個名字的出現要比這兩種說法的發明要早,而事實上這門語言在拼寫上根本就不是一個首字母縮寫。在談到這門語言的時候,要叫它Perl,因為這是用來運行它的命令的拼法。在和Perl黑客對話的時候,認出什麼都不知道的新手的最簡單方法是把它叫做PERL。

2.完成的方法不止一種

Perl語言和社區的一個主要口號是TIMTOWTDI,發音方法是「Tim Toady」。這個才真的是一個首字母縮寫,它的意思是「完成的方法不止一種(There Is More Than One Way To Do It)」。Perl的層次真的有很多,這是你需要記住的重要內容。雖然完成某件事情的某些方法要比完成同一件事情的其它方法更好,但是你可以確信的是,你可以用Perl做很多東西,完成的方法不止一種。

3.使用警告,使用嚴格的限制

警告和嚴格的pragma是Perl黑客武器庫裡的用來調試代碼的重要武器。警告不會防止程序被執行,但是會為如何修復代碼提供有用的信息。

如果沒有使用嚴格的編程風格的話,例如限定範圍的變量,嚴格的pragma會真正地防止代碼被執行。有的時候,一個程序可能不使用嚴格的 pragma會更好,但是如果你剛剛開始使用Perl,那麼在你需要相當長的一段時間才能夠意識到這種情況,到了那個時候就儘管使用它吧。

在標準的UNIX系統裡,在命令行裡啟動警告和嚴格pragma的Perl腳本看起來就像下面這樣:

#!/usr/bin/Perl -w
use strict;

警告也可以用一個語句來啟動,就像下面這樣:

#!/usr/bin/Perl
use strict;
use warnings;

在Perl裡一個pragma就是一個預處理程序指令。換句話說,它是一條在代碼被編譯執行之前送到編譯器的指令。Pragma改變了編譯器分析代碼的方式。

4.使用錯誤檢查

通過程序的命令行裡的-T參數,你可以明確地啟動錯誤檢查。這是一個用來檢查程序裡所有輸入以防止出現「錯誤」數據的安全手段,如果惡意用戶試圖破解運行你代碼的系統的安全,這有助於保證接收的數據不會允許進行任意代碼執行。這在你使用Perl/CGI腳本處理Web頁面上 HTML的數據時顯得尤其重要。它可以與-w參數一起使用,也就是-wT。

5.使用靜態範圍變量

通過靜態範圍,你可以使用my()操作符來創建變量。簡單地說,這意味著變量的範圍被限制到了當前的上下文;如果你在子程序裡使用my()聲明一個變量,那麼這個變量只能存在於子程序裡。靜態範圍的值就是隔開模塊代碼各個部分的東西。

例如,如果你在使用Perl模塊或者庫,但是並不確切地知道裡面的代碼是什麼樣的,那麼使用靜態變量就能夠有助於防止意外地把新的值賦予需要到後來都一直保持不變的變量。在使用Perl編寫靜態範圍變量的時候,在你的變量中使用靜態範圍是有其作用的。例如,對於從其他語言轉到Perl的人員來說,你可能需要知道靜態範圍變量,有人還說這些變量是「私有變量」。

6.如何給你的程序命名

Perl程序應該在它們的名字裡有一個正確的擴展名。很多質量低劣的Perl說明裡簡單地把.pl用作所有文件的擴展名,比如把Perl腳本命名為foo.pl等。從技術上講,.pl擴展名應該被用於Perl的庫,而不是可執行的Perl程序。對於可執行文件,你應該使用.plx,或者如果你的操作系統允許,根本就不使用擴展名都可以。Perl模塊應該使用.pm文件擴展名。在Perl腳本文件名裡只使用字母、數字字符和下劃線,用一個字母(或者下劃線)作為文件的首字符(這與變量名的首字符類似)都被認為是非常好的做法。

7.如何使用CPAN

綜合Perl典藏網(Comprehensive Perl Archive Network,CPAN)已經成為一個尋找免費的、可重複使用的代碼的豐富資源。在CPAN裡你可以找到大量的Perl模塊,它們可以用來增強程序功能,減少編寫代碼時間。使用CPAN的方式取決於你的操作系統以及Perl分析器的實現,但是你可以使用Web瀏覽器訪問CPAN。Perl的實現一般都帶有至少一個命令行工具,用於安裝來自CPAN的Perl模塊。

8.如何使用Perldoc

Perldoc形式的針對Perl的在線文檔數量巨大、內容豐富。把Perldoc安裝在你的系統裡,你就可以用它來獲得任何關於標準的Perl函數、已安裝模塊、變量,以及其他一些東西的文檔——甚至是關於Perldoc 自己的文檔!這就是好比是在你的手頭放了一套最完整的編程參考書,免費的,可以搜索的,因為它是電子版的。

在某些系統上,Perldoc在默認情況下就會隨同Perl一起被安裝,而在其他一些系統上,需要你自己動手安裝。如果在安裝Perldoc的時候碰到了問題,你可以訪問Perldoc在線網站。你要確保自己知道怎麼使用Perldoc,因為它能夠讓你更加有效地以意想不到的方式讓你成為Perl黑客。

9.不要重新發明輪子

你應該經常使用子程序、模塊和庫。這有助於更快地編寫代碼,並有助於防止在你需要在多個程序裡使用相同的功能,或者在一個程序裡需要多次使用相同功能的情況下代碼變得無法管理。這要通過使用子程序、模塊和庫把代碼塊與其他的源代碼分開來實現。在大多數情況下,你最好使用已經有的設計,而不用重新從草圖開始發明輪子。此外,當在重新使用來自子程序、模塊或者庫的代碼時,你或多或少地需要對代碼進行一些改進。

在Perl裡,「子程序(subroutine)」這個術語大致相當於C語言裡的「函數(function)」。

10.正則表達式是你的好朋友

Perl的正則表達式句法能夠有助於讓你的代碼看起來是非門外漢的作品,這就導致有的時候Perl編程的入門者避免使用regexen。這真的是一個大錯誤。正則表達式為 Perl編程語言增添了很大的能力,常常能夠讓程序用三行代碼就完成其他語言用五十行完成的任務。正則表達式是由一些縮寫組成的表達式,用於匹配字符串的模式,這些字符串可以被用尋找和操控大字符串裡的小字符串。所以Perl黑客有必要學習和熟練掌握regex句法。

使用正則表達式的Perl黑客和其他程序員常常被叫做「regexen」或者「regexes」(單數形式是「regex」)。「regex」的另外一個版本是「regexp」,但是我搞不清為什麼有人會加上這麼一個讓它變得更加難以拼讀的字母。

一旦你消化了本文列出這些東西,你就已經準備好真正開始學習Perl以及如何用它來編程了。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。