全球专业中文经管百科,由121,994位网友共同编写而成,共计436,017个条目

Perl

用手机看条目

出自 MBA智库百科(https://wiki.mbalib.com/)

目錄

什麼是perl

  Perl,一種功能豐富的電腦程式語言,運行在超過100種電腦平臺上,適用廣泛,從大型機到便攜設備,從快速原型創建到大規模可擴展開發。

  Perl最初的設計者為拉里·沃爾(Larry Wall),於1987年12月18日發表。現在的版本為Perl 6,於2015年12月25日更新。

  Perl借取了C、sed、awk、shell 腳本語言以及很多其他程式語言的特性,其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。簡而言之,Perl像C一樣強大,像awk、sed等腳本描述語言一樣方便,被Perl語言愛好者稱之為“一種擁有各種語言功能的夢幻腳本語言”、“Unix 中的王牌工具”。

  Perl 一般被稱為“實用報表提取語言”(Practical Extraction and Report Language),你也可能看到“perl”,所有的字母都是小寫的。一般,“Perl”,有大寫的 P,是指語言本身,而“perl”,小寫的 p,是指程式運行的解釋器。

  中文名 實際抽取與彙報語言 外文名 Perl(Practical Extraction and Reporting Language) 設計者拉里·沃爾 設計時間 1987年12月18日 借取程式語言 C、awk、shell scripting等

Perl的歷史

  1987年Larry Wall發佈Perl1.0以來,用戶數一直急劇增加,同時越來越多的程式員與軟體開發者(商)參與Perl的開發。從最初被當做一種跨平臺環境中書寫可移植工具的高級語言開始,Perl被廣泛地認為是一種工業級的強大工具,可以在任何地方用來完成你的工作。perl的前身是Unix系統管理的一個工具,被用在無數的小任務里。後逐漸發展成為一種功能強大的程式設計語言,用作Web編程、資料庫處理、XML處理以及系統管理;在完成這些工作時,同時仍能處理日常細小工作,這是它的設計初衷。Perl特別適合系統管理和Web編程。實際上已經被用在所有Unix(包括Linux)捆綁在一起作為標準部件發佈,同時也用於Microsoft Windows和幾乎所有操作系統。Perl的應用非常廣泛。

Perl的基本信息

  Perl 最初的設計者為拉里·沃爾(Larry Wall),他於1987年12月18日發表。Perl借取了C、sed、awk、shell 腳本語言以及很多其他程式語言的特性。其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。

  Perl 被稱為“實用報表提取語言”(Practical Extraction and Report Language)。它是術語,而不僅僅是簡寫,Perl的創造者,Larry Wall提出第一個,但很快又擴展到第二個。那就是為什麼“Perl”沒有所有字母都大寫。沒必要爭論哪一個正確,Larry 兩個都認可。

Perl編程語言

  Perl是由Larry Wall設計的,並由他不斷更新和維護的編程語言。

  Perl具有高級語言(如C)的強大能力和靈活性。事實上,你將看到,它的許多特性是從C語言中借用來的。

  Perl與腳本語言一樣,Perl不需要編譯器和鏈接器來運行代碼,你要做的只是寫出程式並告訴Perl來運行而已。這意味著Perl對於小的編程問題的快速解決方案和為大型事件創建原型來測試潛在的解決方案是十分理想的。

  Perl提供腳本語言(如sed和awk)的所有功能,還具有它們所不具備的很多功能。Perl還支持sed到Perl及awk到Perl的翻譯器。

  簡而言之,Perl像C一樣強大,像awk、sed等腳本描述語言一樣方便。

特點

  Perl的解釋程式是開放源碼的免費軟體,使用Perl不必擔心費用。Perl能在絕大多數操作系統運行,可以方便地向不同操作系統遷移。

  Perl 是一種能完成任務的語言。從一開始,Perl 就設計成可以把簡單工作簡單化,同時又不失去處理困難問題能力的語言。它可以很容易操作數字,文本,文件和目錄,電腦網路,特別是程式的語言。這種語言應該很容易運行外部的程式並且掃描這些程式的輸出獲取感興趣的東西。而且它還應該很容易能把這些你感興趣的東西交給其它程式做特殊的處理。當然,這種語言還應該很容易在任何現代的操作系統上可以移植地編譯和運行。

基本語法

  • 變數定義,以$號開頭,如:$num =1;
  • 數組定義,以@開頭,如:@array = (1,2,3);數組元素調用 $array[index],其中index表示數組下標,如上例,$array[0]的值是1
  • 散列定義,以%開頭,如:%hash=("a",1,"b",2);散列調用 %hash,其中keys表示鍵值,多用字元串表示,註意hash的key必須具有唯一性,但value可以不唯一,為此hash的key經常被用來做唯一化處理,如上例中的"a", "b", values是keys對應的值,如1,2。$hash{"b"}的值是2。

優點

  Perl追求的是簡單, 解決一個一般的問題用它幾行代碼就完成了。一個稍複雜一點的問題代碼也不會超過一屏! 在軟體測試中,Perl通常是非常重要的角色。一般一個測試通用函數庫就要分十幾個文件,甚至更多,包含多達上千個定製功能。而這些函數將在主函數運行時,不定數量的被調用。幾乎可以說,一切自動過程都是由Perl自己完成的,可見其功能的強大和在當今電腦技術高速發展的時期仍然發揮著重要的作用。

  Perl 最初是當做一種 Unix 的腳本語言設計的,但是它早就移植到大多數其它操作系統里了。因為 Perl 幾乎可以在任何地方運行,所以 Perl 可以說是當今最具有移植性的編程環境;要想寫可移植的 C/C++ 程式,你得在程式裡加上一大堆 #ifdef 標簽來區分不同的系統;要想寫可移植的 Java 程式,你必須理解每種新的 Java 實現的特質;要想寫可移植的shell,你可能要記住每條命令在每種操作系統上的語法,走運的時候你可能可以找到一些公共的東西;要想寫可移植的 Visual Basic 程式,需要對“移植”有個更靈活的定義。

  讓我們很高興的是 Perl 避免了所有這些問題,同時還保留了這些語言中的許多優點,同時還有一些自己的特色。Perl 的特色來自許多方面:它的特性集的工具,Perl 社區的創造性,以及開源運動的大環境。不過,許多這些特性都是混合的東西;Perl 的身世複雜,它總是把事物看成是優點的不同方面,而不是弱點。Perl 是“背黑鍋我來”的語言。如果你覺得自己陷入一團亂麻之中,非常渴望自由,那麼請使用 Perl。

  Perl 是跨文化的。Perl 的爆炸性增長很大程度上是因為那些前 Unix 系統程式員的渴望,他們希望從他們的“老家”帶著儘可能多的東西。對於他們而言,Perl 是可移植的 Unix 文化蒸餾器,是"此路不通"的沙漠中的綠洲。從另外一個角度來看,Perl 還可以從另外一個方向運轉:在 Windows 上工作的 web 設計者通常會非常開心地發現他們的 Perl 程式可以不加修改地在 Unix 伺服器上跑。

  儘管 Perl 在系統程式員和 web 設計師中間非常流行,但這隻是因為是他們最早發現 Perl 的,Perl 可以用於更廣泛的用途。從 Perl 最早的文本處理語言開始,它已經發展成為一種非常複雜的,通用的編程語言,以及完整的開發環境,包括調試器,調節器,交叉引用,編譯器,庫,語法提示編輯器,以及所有其它“真正”的編程語言所具有的所有掛勾,只要你需要。當然這些東西都是讓我們可能處理難的問題的東西,而且很多其它語言也可以做到這一點。Perl 之所以成為 Perl 是因為它從來不會因為保持簡單事情簡單化而丟失其他方面的特性。

  因為 Perl 既強大又好用,所以它被廣泛地用於日常生活的方方面面,從宇航工程到分子生物學,從數學到語言學,從圖形處理到文檔處理,從資料庫操作到網路管理。很多人用 Perl 進行快速處理那些很難分析或轉換的大批量數據,不管你是處理 DNA 序列,網頁,還是豬肚皮的未來都無所謂。實際上,在 Perl 社區有一個笑話就是,下次股市大崩盤就很有可能是哪個家伙寫的腳本裡頭有bug造成的。(不過,樂觀點來看就是,任何還在失業股票分析師仍然有可以利用的技巧。)

  Perl 的成功有許多原因。Perl 早在開源軟體的名字出現之前就已經是一個成功的開源項目了。Perl 是自由的,並將永遠自由下去。你可以在任何合適的場合使用 Perl,只需要遵守一個非常自由的版權就可以了。如果你在從事商業活動並且還想使用 Perl,那麼用就是了。你可以把 Perl 嵌入到你寫的商業軟體中而不需要支付任何費用也沒有任何限制。如果你碰上一個 Perl 社區解決不了的問題,那你也還有最後的一招:源程式本身。 Perl 社區不會在“升級”的偽裝下租給你它們的商業秘密。而且 Perl 社區也不會“停業 ”,更不會讓你孤立無援。

  Perl 是自由軟體這一點無疑對它是有幫助的。但這一條並不足以解釋 Perl 現象,因為許多自由軟體包沒有能繁榮起來。Perl 不僅自由;而且好玩。人們覺得自己在 Perl 里可以有創造力,因為它們有表達的自由:他們可以選擇是為電腦速度優化還是為程式員的速度優化,是冗長還是簡潔,是選擇可讀性還是可維護性,或者選擇復用性,移植性,接受性和傳授性等等。假如你進入一次模糊的 Perl 比賽,甚至你還可以為模糊性做優化。

  Perl 可以給予你所有這些自由,因為它是一門有著分裂人格的語言。Perl 同時是很簡單並且很富有的語言。Perl 從其它地方拿來好主意,然後把它們安裝到易用的框架裡面。對於只是喜歡她的人來說,Perl 是實用抽取和報表語言(Practical Extractoin and Report Language)。對那些熱愛她的人而言,她是變態電子垃圾製造者(Pathologically Electric Rubbish Lister)。在少數人眼裡,Perl 是毫無意義的重覆練習。不過世界需要一點點冗餘。精簡主義者總是想把事物分隔開。而我們則總是企圖把它們合併到一起。

  Perl 之所以是簡單的語言是有很多原因的。比如你用不著知道什麼特殊的指令就可以編譯 Perl 程式--只要把它當做批處理或者 shell 腳本執行就可以了。Perl 的類型和結構很容易使用和理解。Perl 對你的數據沒有任何限制--你的字串和數組可以要多長就多長(只要你有足夠的記憶體),而且它們都會自動增長。Perl 不會強迫你學習新的語法和語意,Perl 改從許多其它你已經熟悉的語言里(比如 C, awk, BASIC 和 Python, 英文,希臘語等)借來語法。實際上,任何程式員都可以從書寫良好的 Perl 代碼段中讀懂它的含義。

  最重要的是,你不用先學習所有 Perl 的東西就可以開始寫有用的程式。你可以寫很小的 Perl 程式。你也可以象小孩那樣寫 Perl 程式,我們保證不會笑話你。或者更準確地說是,我們絕不會笑話小孩做事情的創造性。Perl 里的許多觀點都是從自然語言中借來的,其中一條最好的觀點就是只要你能把自己的意思表述清楚,那麼你就可以使用這些語言的一個子集。Perl 文化可以接受任何熟練程度的成員。我們不會在你背後放個語言警察。如果你的老闆不炒你,而且你的 Perl 腳本也能完成工作,那麼它就是“正確”的。

  儘管 Perl 很簡單,但它仍然是一種特性很豐富的語言,如果你想用那些特性的話,那你就要學習一些東西。這也是把難題變簡單的學費。雖然你要想把所有 Perl 能做的事情吸收還需要一些時間,但到你需要這些功能的時候你就會非常開心地發現 Perl 已經可以做這些事情了。

  由於 Perl 的繼承性,就算它只是用做數據歸納語言的時候也有豐富的特性,Perl 一開始就設計成可以瀏覽文件,掃描大量文本並且生成動態數據以及列印出這些數據的良好格式化的報表。不過,隨後 Perl 就開始風行,於是它就成了可以操作文件系統,進程管理,資料庫管理,進行 C/S 編程和安全編程,web 信息管理,甚至可以進行面向對象和麵向功能的編程的語言。而且這些功能並非只是在 Perl 這邊,每種新功能都和其它東西交流得很好,別忘了 Perl 從一開始就是設計成膠水語言的。

  而且 Perl 並不僅僅只能黏合它自己的特性。Perl 是設計成可以用模塊擴展的語言。你可以用 Perl 快速設計,編寫,調試和部署 Perl 應用,並且你還可以在需要的時候很方便地擴展這些應用。你可以在其它語言里嵌入 Perl,而且你也可以在 Perl 里嵌入其它語言。通過模塊輸入機制,你可以把這些外部的擴展當做內置於 Perl 的特性。那些面向對象的外部庫在 Perl 內部仍然保持面向對象的特征。

  Perl 還在許多其它方面協助你。和嚴格的每次執行一條命令的命令文件和 shell 腳本不同的是,Perl 先把你的程式快速編譯成一種內部格式。和其它任何編譯器一樣,這個時候還進行各種優化,同時把碰到的任何問題反饋給你。一旦 Perl 的編譯器前端對你的程式表示滿意了,它就把這些中間代碼交給解釋器執行(或者是給其它的能生成 C 或者位元組碼的模塊後端)。聽起來挺複雜,不過 Perl 的編譯器和解釋器乾這些活效率相當高,我們的編譯-運行-修改的過程幾乎都是以秒計。再加上 Perl 的許多其他開發特性,這種快速的角色轉換很適合做快速原型設計。然後隨著你的程式的成熟,你可以逐步擰緊身上的螺母,減少散漫增強紀律。如果你做得好,Perl 也能幫你這個忙。

  Perl 還可以幫你寫更安全的程式。除了其它語言提供的典型的安全介面之外,Perl 還通過一種跟蹤數據的機制給你提供預防意外安全錯誤的保護,這樣就可以在災害發生之前預防其發生。最後,Perl 還可以讓你設置一個特殊的防護隔段運行那些來源不明的 Perl 代碼,以此來杜絕危險操作。

  不過,偏執一點兒說,Perl 幫你的大部分內容和 Perl 本身沒有什麼關係,而是和使用 Perl 的人有關。坦率地說,Perl 社區的人們可以說是地球上最熱心的人了。如果 Perl 運動裡面有那麼一點點宗教色彩的話,那麼這就是它的核心了。Larry 希望 Perl 社區像一小片天堂那樣運轉,目前看來他的願望基本上是實現了。我們也請你為此做出自己的努力。

  Perl之所以強大, 是因為有CPAN, CPAN上面有無數的開源模塊, 從科學計算到桌面應用到網路等等各個方面都有大量的模塊! 並且世界上也還有無數的人在向上面添加模塊! 如果你想要用PERL實現某功能, 不用自己做, 在CPAN上面搜一搜, 多半都會得到已有的結果! CPAN("the Comprehensive Perl Archive Network"全面的 Perl 存檔網路)是查找任何 Perl 有關的東西的中心倉庫。它包含從整個 Perl 社區收集來的智慧:成百上千的 Perl 模塊和腳本,相當於好幾本書的文檔,以及整個 Perl 發佈。如果有東西是用 Perl 寫的,而且這個東西很有用而且是自由的,那麼它很有可能就在 CPAN 上。

缺點

  也正是因為Perl的靈活性和“過度”的冗餘語法,也因此獲得了write-only的“美譽”,因為許多Perl程式的代碼令人難以閱讀,實現相同功能的程式代碼長度可以相差十倍百倍。但Perl同樣可以將代碼書寫得像Python或Ruby等語言一樣優雅。

  很多時候,perl.exe進程會占用很多的記憶體空間,雖然只是一時,但是感覺不好。

相關條目

本條目對我有幫助2
MBA智库APP

扫一扫,下载MBA智库APP

分享到:
  如果您認為本條目還有待完善,需要補充新內容或修改錯誤內容,請編輯條目投訴舉報

本条目由以下用户参与贡献

刘维燎,苏青荇.

評論(共0條)

提示:評論內容為網友針對條目"Perl"展開的討論,與本站觀點立場無關。

發表評論請文明上網,理性發言並遵守有關規定。

打开APP

以上内容根据网友推荐自动排序生成

下载APP

闽公网安备 35020302032707号