日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Perl 語言的重要價值體現(xiàn)

 todaytomo 2007-01-05

Perl 語言的重要價值體現(xiàn)

盡管媒體們?nèi)绱岁P(guān)注Java和ActiveX,但真正“讓英特網(wǎng)活起來”的卻應(yīng)該是Perl,一種專業(yè)技術(shù)分析家們視而不見,但是卻出現(xiàn)在所有網(wǎng)絡(luò)管理員、系統(tǒng)管理員或程序員腦中的語言。他們每天的工作包括建立常規(guī)的網(wǎng)絡(luò)應(yīng)用,或是把不同的程序粘起來,以實現(xiàn)它們的設(shè)計者們沒有預(yù)見到的功能。Sun的第一位網(wǎng)絡(luò)管理員Hassan Schroeder評論道:“Perl是英特網(wǎng)的傳送帶/血管。”

Perl最初是由Larry Wall為UNIX開發(fā)的一種腳本語言,其目的是為了將UNIX shell的易用性和編程語言(比如C)的強大功能與可塑性結(jié)合起來。Perl很快成為了UNIX系統(tǒng)管理員們的偏愛的語言。

隨著World Wide Web的發(fā)展,Perl的用途有了極大的拓展。公共網(wǎng)關(guān)接口(CGI)提供了在網(wǎng)絡(luò)服務(wù)器和程序之間傳遞數(shù)據(jù)并利用網(wǎng)頁返回結(jié)果的簡單方法。而Perl則迅速成為了CGI編程的主要語言。

在功能強大的Win32移植版本出現(xiàn)之后,Perl也有力地入侵,成為為NT系統(tǒng)的腳本語言之一,特別是在系統(tǒng)管理、網(wǎng)站管理與編程方面大顯身手。

曾經(jīng),在主流的分析家們認為CGI程序和Perl將會很快被Java,ActiveX和其他新的專門為網(wǎng)絡(luò)開發(fā)的技術(shù)所取代。然而,他們沒有料到的是, Perl繼續(xù)在發(fā)展壯大,Microsoft的Active Server Pages(ASP)和Apache服務(wù)器的mod_perl都支持在服務(wù)器上直接運行perl程序,以及數(shù)據(jù)界面如DBI,Perl DataBase界面,為后臺數(shù)據(jù)庫與Perl的整合提供穩(wěn)定的API。

這篇文章探討了為什么Perl變得越來越重要的原因,不局限于網(wǎng)絡(luò),而是做為一種廣泛用途的計算機語言。這些原因包括:

  • Perl這樣的腳本語言與Java,C++或C這樣的傳統(tǒng)程序語言適合的任務(wù)有著跟本的不同。
  • Perl將許多程序“粘著”在一起的能力,或者說將一個程序的輸出轉(zhuǎn)化成另一個程序的輸入的能力。
  • Perl在處理文本方面無以倫比的能力,如正則表達式等強大特性。當網(wǎng)絡(luò)文本(HTML)重新興起而成為所有應(yīng)用軟件和系統(tǒng)的網(wǎng)絡(luò)“外交語言”后,這一點變得尤其重要。
  • 分布式的開發(fā)團隊以一種以有機的、進化式的方式,跟隨著快速變化的需求。
一種好的腳本語言應(yīng)該是一種高級軟件開發(fā)語言,既能夠快速地開發(fā)小工具,同時又擁有開發(fā)復(fù)雜程序所需要的工作流與數(shù)據(jù)組織形式。執(zhí)行速度一定要快。在調(diào)用系統(tǒng)資源如文件操作,內(nèi)部進程通信,進程控制等方面一定要有效率。一種好的腳本語言應(yīng)該可以運行在所有流行的操作系統(tǒng)上,適合信息處理(自由文本格式)和數(shù)據(jù)處理(數(shù)字與二進制數(shù)據(jù))。它要可插入,可擴展。Perl符合了上面所有的標準。

為什么/何時要用腳本語言?

John Ousterhout在他的文章中有力地闡述道,腳本:二十一世紀的高層次程序語言。“像Perl和Tcl這樣的腳本語言代表了一種與C或Java這樣的系統(tǒng)程序語言非常不同的編程風(fēng)格。腳本語言是被設(shè)計來“粘著”應(yīng)用程序的;它們使用無類型的方法以達到比系統(tǒng)程序語言更高層次和更快捷的應(yīng)用程序開發(fā)。計算機速度的提升和各種應(yīng)用程序的混和與變化正使得在未來腳本語言變得越來越重要。”

Ousterhout繼續(xù)道:就在我們接近二十世紀的尾聲的時候,人們編寫程序的方法發(fā)生了一個跟本性的轉(zhuǎn)變。這個轉(zhuǎn)變是人們從C和C++這樣的系統(tǒng)程序語言轉(zhuǎn)向了Perl或Tcl這樣的腳本語言。雖然許多人正處于這樣的轉(zhuǎn)變之中,但很少人意識到了它的發(fā)生,更少有人明白它為什么在發(fā)生....

腳本語言是被設(shè)計來完成與系統(tǒng)程序語言所不同的任務(wù)的,這導(dǎo)致了它們之間根本性的差異。系統(tǒng)程序語言的設(shè)計是從底層開始建立數(shù)據(jù)結(jié)構(gòu)和算法,從最初級的計算機元素如內(nèi)存單元開始。與之相反,腳本語言被設(shè)計用來做“膠著”的工作:它們假定已經(jīng)存在很多有效的組件,然后將它們連接起來。系統(tǒng)程序語言使用嚴格的數(shù)據(jù)類型來控制復(fù)雜性,而腳本語言則沒有數(shù)據(jù)類型,以便方便地連結(jié)組件并提供快速開發(fā)應(yīng)用程序的能力。

腳本語言和系統(tǒng)程序語言是互補的,而且從60年代起主要的操作系統(tǒng)都同時支持它們。然而,近期的一些趨勢,如更快的計算機、更好的腳本語言的出現(xiàn),圖形用戶界面和組件體系結(jié)構(gòu)的重要性不斷增加,和英特網(wǎng)的發(fā)展,使得腳本語言的應(yīng)用大大拓展。腳本語言將有越來越多的應(yīng)用,而系統(tǒng)程許語言則主要被用來開發(fā)各種組件,這樣的趨勢在下個十年中還會繼續(xù)。

系統(tǒng)管理員們是最早利用腳本語言的強大功能的人。任何一個操作系統(tǒng)中,都存在這種問題。一般是為了自動完成某種重復(fù)性的工作。即使Macintosh系統(tǒng)也需要一些用戶定義的自動操作。任務(wù)可能很簡單,比如自動備份和恢復(fù)系統(tǒng),或者很復(fù)雜,比如周期性地儲存硬盤上所有文件,或者存儲二十四小時內(nèi)所有系統(tǒng)設(shè)置的改動。有些時候已經(jīng)有這樣的工具可以完成這些工作,但自動操作需要有控制程序來啟動它們,提取和轉(zhuǎn)化它們的輸出,以及協(xié)調(diào)這些程序的工作。

許多系統(tǒng)都內(nèi)置了一些腳本語言,如VMS的DCI,MS-DOS的BAT文件,UNIX的shell腳本,IBM的Rexx,Windows的 Visual Basic and Visual Basic for Applications,還有Applescripts都是專用于某種系統(tǒng)的腳本語言的好例子。Perl的獨特在于他打破了腳本語言與某個操作系統(tǒng)的緊密聯(lián)系,而成為了一種在多個平臺下廣泛使用的腳本語言。

有些腳本語言,特別是Perl和Visual Basic,或者算上Tcl和Python,都做為多用途的語言而被廣泛使用。成功的腳本語言一個長處在于它們很容易調(diào)用操作系統(tǒng)功能/服務(wù)。更高一層次來說,做為一種多用途的腳本語言,它們必須穩(wěn)健到你可以使用它們編寫復(fù)雜應(yīng)用程序的程度。腳本語言可以用來編寫原型,建模和做測試,但當腳本語言運行足夠迅速和穩(wěn)健的時候,原型就直接成為了應(yīng)用程序。

那么,為什么不使用那些多用途的程序語言如C,C++或Java替代腳本語言呢?答案很簡單:成本。開發(fā)時間比硬件和內(nèi)存更昂貴。腳本語言容易學(xué)習(xí)并且使用起來很簡單。

正如Ousterhout指出的,腳本語言通常沒有什么數(shù)據(jù)類型概念。腳本不區(qū)分整數(shù)和浮點數(shù),變量是沒有類型的。這是腳本語言善于快速開發(fā)的原因之一。大概念是“不著急處理細節(jié)”。因為腳本語言擅長調(diào)用系統(tǒng)工具來做難做的事情(如拷貝文件和建立目錄或文件夾),尚未實現(xiàn)的細節(jié)就可以用編譯語言易于寫成的小程序來處理。

對于編譯語言來說數(shù)據(jù)類型有什么用呢?它使得內(nèi)存管理更加容易,但對于程序員來說更難了。想想看:當FORTRAN流行的時候一個程序員賺多少錢一小時?內(nèi)存值多少錢?而現(xiàn)在呢?時代變了。內(nèi)存便宜,程序員很貴!

系統(tǒng)語言必須把任何東西都寫出來,這使得編譯復(fù)雜數(shù)據(jù)結(jié)構(gòu)更容易,但是程序員更難編寫。腳本語言盡量多地自己做出假定,盡量少地要求明確指定。這讓腳本語言更容易學(xué)習(xí),寫起來也更快。其代價是編寫復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和算法時很困難。但是Perl在復(fù)雜數(shù)據(jù)結(jié)構(gòu)和算法方面都做得很好,同時也沒有犧牲寫簡單程序時的簡便。

解釋語言與編譯語言

絕大多數(shù)腳本語言都是解釋型語言,感覺上好像不適合大型程序項目。這種說法是應(yīng)該要糾正的。

確實,除某些有硬件特異性的語言之外,大部分情況下解釋型語言程序都比編譯語言要慢。解釋型語言的優(yōu)勢在于,它寫的程序在解釋器所能安裝的任何系統(tǒng)上都可以運行。解釋器負責(zé)處理那些系統(tǒng)特異性的細節(jié)問題,而不是應(yīng)用程序本身。(當然也有例外,比如這個應(yīng)用程序可能調(diào)用了某個不可移殖的系統(tǒng)特性)

操作系統(tǒng)命令解釋器如MS-DOS的command.com以及早期版本的UNIX C shell是解釋器運行的很好例子:腳本里的命令一條一條都喂到解釋器里去。對于效率影響最大的就是循環(huán):循環(huán)中的每一條命令在每次運行的時候都重新解釋。有些人認為所有的解釋型語言都這么...緩慢、低效、一次一行。不過事實并不是這樣。

實際上有一些中間型語言,運行的時候被編譯成某些中間碼,然后被解釋器裝載運行。Java就是一個例子,這讓它成為了一種很有價值的跨平臺語言。所有在不同硬件上的java解釋器都能交流并共享數(shù)據(jù)和進程資源。對于嵌入系統(tǒng)來說這是非常棒的,因為嵌入系統(tǒng)實際上就是一種特殊目的的硬件。然而Java并不是一種腳本語言。它需要數(shù)據(jù)聲明,而且是預(yù)先編譯的。(除非你把實時編譯也算在內(nèi)—雖然它實際上只是生成代碼)

Perl也是一種中間型語言。Perl代碼根據(jù)需要一塊一塊地進行編譯,所不同的是編譯好的可執(zhí)行部分被存在內(nèi)存中而不是寫成文件。任何一塊Perl代碼塊只被編譯一次。Perl在設(shè)計上的優(yōu)勢使得所有這些優(yōu)化都很值得。Perl保留了解釋語言的可移殖性,又有了接近編譯語言的執(zhí)行速度。已經(jīng)快經(jīng)歷了十年歷史的Perl,擁有數(shù)十萬的開發(fā)者,現(xiàn)在又將經(jīng)歷它的五次脫胎換骨,它運行得既簡潔又迅速。雖然在啟動的時候可能會有一些延遲,因為需要一些時間編譯代碼,但是相對于代碼執(zhí)行的時間來說這很短暫。而且,像”fast CGI”這樣的技術(shù)可以將反復(fù)執(zhí)行的腳本鏡像存在保留在內(nèi)存中來避免啟動延遲,除非這個腳本是第一次運行。

不管怎么說,Perl 5.005將有一個由牛津大學(xué)的Malcolm Beattie所寫的編譯器。這個編譯器將消除編譯過程中的啟動延遲,并加入一些小的加速技術(shù)。它也消除了某些編寫商業(yè)應(yīng)用程序的程序員對腳本語言的生理恐懼。(使用編譯器之后,其他人將無法再看到源代碼)

信息處理與數(shù)據(jù)處理

互聯(lián)網(wǎng)只是我們與計算機交流形式的許多巨大變化中的一個。這個改變在我們對工業(yè)的稱乎中就能看得出來。過去它被稱為“數(shù)據(jù)處理”,比如說:“如果我想中午拿到數(shù)據(jù)處理的結(jié)果的話,就得早上四點中把東西遞交到數(shù)據(jù)中心去。”現(xiàn)在我們將它稱為“信息服務(wù)”,比如“信息服務(wù)部的頭正和我們的計劃委員會一起工作”。興趣和重點現(xiàn)在放在了“信息”而不是“數(shù)據(jù)”上。很明顯,現(xiàn)在我們更關(guān)心信息,而信息往往同時包括文本和數(shù)據(jù),而不僅僅是數(shù)據(jù)。Perl在處理信息方面是很優(yōu)秀的。

Perl處理信息方面的很大一部分能力來源于一種叫做正則表達式的特殊語法。正則表達式賦予了Perl極大的處理和操作自由文本中的模式的能力。其他語言也有支持正則表達式的,(Java甚至有自由/免費的正則表達式庫),但是沒有一種能像Perl一樣結(jié)合得這么好。

很多年以來,總的趨勢一直都是將文本文件整合到特殊的應(yīng)用文件格式中。唯有Unix,將ASCII文本定義為統(tǒng)一的程序文件交換格式,而其他的那些系統(tǒng)則讓不兼容的文件格式越來越多。急劇扭轉(zhuǎn)了這個趨勢的,是互聯(lián)網(wǎng)的出現(xiàn)。它的HTML數(shù)據(jù)格式是由有標記的ASCII文本組成的。由于互聯(lián)網(wǎng)的重要性, HTML—以及與它相伴的ASCII文本—如今處在數(shù)據(jù)交換格式的中心地位,幾乎所有的應(yīng)用程序都可以輸出它。微軟甚至計劃提供HTML方式的桌面。 HTML的繼承者,XML(可擴展標記語言)如今已被廣泛認為將成為混和環(huán)境下的標準文件交換格式。

HTML的強大顯著地增強了Perl的力量。它是種理想的語言,無論是在核實用戶輸入在HTML表格中的內(nèi)容,操作大量HTML內(nèi)容,還是提取和分析各種/海量log文件的時候。

這只是Perl處理文本強大能力的一方面。Perl不僅給你許多分解數(shù)據(jù)的方法,還給你許多將數(shù)據(jù)粘回一起的辦法。因此Perl在處理信息流并重新組裝方面也很理想。可以很輕易地將信息轉(zhuǎn)換后輸入另一個程序或進行分析匯總。

有人說下一代的應(yīng)用程序?qū)⒉粫乾F(xiàn)在這些程序的樣子,而是“信息化應(yīng)用程序”,其中文本將構(gòu)成大部分的用戶界面。假想一個典型的企業(yè)內(nèi)部網(wǎng)的應(yīng)用程序系統(tǒng):一個人力資源系統(tǒng),雇員通過它來選擇哪個公共基金會來投資他們的養(yǎng)老金,隨時了解他們帳戶里的數(shù)目,并取得相應(yīng)信息來幫助他們投資。這個系統(tǒng)的界面將包含許多信息化的文檔(一般是以HTML的形式),一些基于表格的簡單CGI程序,以及到后臺實時股票行情系統(tǒng)的鏈接(可能是英特網(wǎng)上的服務(wù))。

利用傳統(tǒng)的編程技術(shù)建立這樣一個系統(tǒng)是很不實際的。任何一個公司的投資策略都會有不同,傳統(tǒng)編程技術(shù)投入的巨大工作量在這樣一個局限的項目里無法得到回報。而用web做為前臺,利用perl腳本完成鏈接到后臺數(shù)據(jù)庫的任務(wù)的話,你可能不需要很多時間就能完成這樣一個系統(tǒng)。

或者來看看Amazon.com,它可能是最成功的新網(wǎng)絡(luò)經(jīng)濟的例子了。Amazon提供一個信息前臺,以及一個后臺數(shù)據(jù)庫和訂單系統(tǒng),然后——你猜對了——用perl將它們連在了一起。

Perl對數(shù)據(jù)庫的鏈接是由一組被功能強大的數(shù)據(jù)庫獨立界面支持的,它們被稱為DBI。Perl+fast-cgi+DBI可能是互聯(lián)網(wǎng)上使用最廣泛的數(shù)據(jù)庫鏈接/連接系統(tǒng)了。ODBC模塊也可以提供類似功能。

考慮到Perl強大的前臺文本處理能力,以及后臺的數(shù)據(jù)庫鏈接功能,因此你應(yīng)該開始明白為什么Perl在新一代信息化應(yīng)用中會起到越來越重要的作用了。

Perl的模式匹配和處理功能在其他方面的應(yīng)用包括生物醫(yī)學(xué)研究,以及數(shù)據(jù)挖掘。任何大的文本數(shù)據(jù)庫,從人類基因組計劃的基因序列分析到某些大網(wǎng)站的日志文件分析,都可以用Perl來處理。最終Perl進一步被用來做基于網(wǎng)絡(luò)的研發(fā)和專門的英特網(wǎng)搜尋應(yīng)用。在模式匹配和網(wǎng)絡(luò)socket開發(fā)方面的優(yōu)勢成為英特網(wǎng)的通訊方面的基石,也使Perl成為建立網(wǎng)絡(luò)機器人的最佳語言,這些機器人用于在英特網(wǎng)上查找關(guān)鍵信息。

Perl用來開發(fā)應(yīng)用

開發(fā)人員越來越認識到Perl作為一種應(yīng)用開發(fā)語言的功用。Perl使得傳統(tǒng)語言沒法做到的項目成為可能。并不只因為Perl開發(fā)簡單,它也可以足夠復(fù)雜,在需要的時候甚至使用最高級的面向?qū)ο笳Z言技術(shù)。

在編制基于socket的客戶端-服務(wù)器應(yīng)用程序的時候Perl比C或C++要簡單。用Perl編寫自由文本處理程序比任何語言都更簡單。Perl有一個由Perl寫成的成熟的調(diào)試器,以及許多選項可以用來建立安全的應(yīng)用程序。幾乎任何一方面的應(yīng)用都有免費的Perl模塊可以使用,當需要的時候便可以動態(tài)加載。

Perl可以很容易的用編譯好的C/C++甚至Java寫的函數(shù)進行擴展。這表明調(diào)用一些還沒用Perl寫的功能或系統(tǒng)服務(wù)也很容易。當在非UNIX系統(tǒng)下運行的時候,由于可以調(diào)用這個系統(tǒng)的特殊功能,因此這種拓展能力變得更加有價值。

Perl也可以在編譯程序中被調(diào)用,或者被插入到其他語言編寫的程序中。人們正在建立一種標準的方法,將Perl整合到Java中去,也就是說Java的類將可以用Perl來寫。目前為止,這些程序需要內(nèi)嵌Perl解釋器。不過1997年的第四季度O’Reilly & Associates的Perl資源工具箱將包含一個新的后臺編譯器,將Perl編譯為Java字節(jié)碼以解決這個問題。

圖形界面

由于Perl是在UNIX系統(tǒng)下開發(fā)的,ASCII終端是主要的輸入輸出設(shè)備(即使是像X一樣的圖形系統(tǒng)也包含了單獨窗口的字符終端),因此Perl并沒有定義固有的圖形界面(不過在今天這樣群雄割據(jù)的圖形界面的世界里這大概也算一種特性)。Perl采用擴展模塊來創(chuàng)見圖形界面的程序。使用最廣泛的就是 Tk,其實最早它是為Tcl腳本語言開發(fā)的圖形工具包,不過很快就被移殖到了Perl上。Tcl依然專注于X-Window系統(tǒng),雖然她已經(jīng)開始被移殖到微軟的Windows系統(tǒng)上。

然而,如前所說,開發(fā)固有的圖形界面已經(jīng)變得不那么重要,因為web正逐漸成為多數(shù)應(yīng)用程序標準的圖形界面。“webtop”做為通用的跨平臺應(yīng)用正在快速的取代“desktop”。只要寫一個“webtop”便可以用在UNIX,Mac,Windows/NT,Windows/95…任何一個有網(wǎng)頁瀏覽器的系統(tǒng)。

實際上,越來越多的網(wǎng)站采用Perl和web來為一些傳統(tǒng)的程序創(chuàng)建更簡單易用的界面。比如Purdue大學(xué)網(wǎng)絡(luò)計算中心為三十種電路模擬工具設(shè)計了一個網(wǎng)頁界面,使用Perl從使用者填好的表格中提取數(shù)據(jù)并轉(zhuǎn)化為命令行,發(fā)給Hub上連著的程序。

多線程

線程是做并行處理的很好的解決方法,尤其是當你在寫雙向通訊或事件驅(qū)動的程序的時候。1997年早些時候Perl已經(jīng)有了一個多線程的補丁。在97年第四季度Perl5.005出現(xiàn)的時候,它將被整合進標準發(fā)布當中。

Perl一直支持的多任務(wù)模型是“fork”和“wait”。最小的調(diào)度單位是進程,它適用于UNIX。Windows/NT的多線程機制并不太一樣,因此 Perl的可移殖性目前便受到了限制。不過如果在進程控制和其他應(yīng)用之間建立抽象層,問題就解決了。而且,調(diào)和UNIX和Win32系統(tǒng)Perl接口的進程控制代碼的工作正在進行,1997年的第四季度就會完成。

Win32系統(tǒng)上的Perl

6年,微軟委托ActiveWare網(wǎng)絡(luò)公司(現(xiàn)在的ActiveState公司)為NT資源庫創(chuàng)建一個Perl與Win32系統(tǒng)的接口。如今網(wǎng)絡(luò)上到處都可以見到這個移植版本,據(jù)說接近一半的Perl源代碼下載都是用在Win32平臺上的。

Perl進入像NT這樣的Win32平臺是有很多原因的。盡管有Visual Basic和Visual Basic for Apllications存在,Win32平臺上的腳本語言支持依然比較弱。雖然VB是解釋型腳本語言,但它依然是一種類型化的語言,用起來比較繁瑣。而且它也沒有像Perl那樣強大的字符串處理能力。當建立大型NT站點的時候,系統(tǒng)管理員們則明顯的認識到圖形用戶界面的限制,對于管理數(shù)百臺計算機來說腳本語言是必須的。

很多時候會有這種情況,一些有經(jīng)驗的系統(tǒng)管理員常常被叫去管理那些不使用UNIX系統(tǒng)的站點,這時使用Perl是將UNIX的優(yōu)點帶到其他系統(tǒng)去的好辦法。

你也不能低估web的影響力量。現(xiàn)在網(wǎng)上有數(shù)以千計用Perl編寫的CGI程序和站點管理工具,支持Perl對于任何服務(wù)器平臺說都是必需的。對于 Microsoft的NT服務(wù)器來說,O’Reilly和Netscape更顯得重要,對Perl的支持是必須的。ActiveState的 PerlScript??可以讓Perl在支持ASP的NT網(wǎng)絡(luò)服務(wù)器,如Microsoft的IIS和O’Reilly的WebSite中的動態(tài)腳本引擎上運行。

除了核心的Perl語言解釋器之外,ActiveState Perl的Win32??接口還包括特別針對Win32環(huán)境的模塊。比如它提供了對自動操作對象的全面支持。隨著越來越多的Windows系統(tǒng)資源和組件支持Perl端口,Win32版本的Perl將能夠使用越來越多的系統(tǒng)功能。

擴展Perl的力量

和Microsoft的Visual Basic或Sun的Java不同,Perl沒有一個巨大的公司為它撐腰。Perl最初是由Larry Wall開發(fā)并做為自由軟件發(fā)布的。Larry后來開發(fā)Perl的工作是通過一個郵件組,在大概兩百個合作者的幫助下進行的,這個郵件組叫做perl5- porters。最初這個郵件組是為了將Perl推向其他平臺而建立的,但最終它成為開發(fā)Perl核心代碼的貢獻者們的聚集之處。

Perl5添加了一個擴展機制,獨立的模塊可以利用這個機制動態(tài)地加載到Perl程序之中。這導(dǎo)致了如今數(shù)百個附加模塊的開發(fā),其中許多重要的模塊現(xiàn)在已經(jīng)成為了Perl標準發(fā)行版本的一部分。附加的模塊可以在綜合Perl存檔網(wǎng)絡(luò)(CPAN)上得到。最好的進入CPAN的界面大概是www.perl.com,那里還包括許多書評,文章以及其他一些Perl程序員和使用者們關(guān)心的信息。

過去對使用自由軟件曾經(jīng)有的偏見,如今已經(jīng)被粉碎了,因為人們認識到過去這些年來有許多最重大的計算機技術(shù)突破是從自由軟件社區(qū)中產(chǎn)生的。 Internet本身很大程度上就是一個合作的自由軟件項目,而且它的發(fā)展也是被那些自發(fā)組織的有遠見的開發(fā)者所引導(dǎo)。類似的,在網(wǎng)絡(luò)服務(wù)器平臺中占有很大一塊市場的是Apache,它也是一個自由軟件項目,由大量的合作開發(fā)者社團創(chuàng)立,拓展和管理的。

除了持續(xù)不斷的開發(fā)之外,Perl社區(qū)還通過新聞組和郵件提供活躍的技術(shù)支持。同時還存在無數(shù)咨詢及付費的技術(shù)支持項目。無數(shù)的書籍提供了極好的文檔材料,包括其中最著名的。Programming Perl,作者是Larry Wall,Randal Schwarz和Tom Chirstiansen。The Perl Journal和www.perl.com提供關(guān)于一些最新進展的信息。

總的來說,由于巨大的開發(fā)者團體和自由軟件社區(qū)合作的傳統(tǒng),Perl具有和可以和最大的公司媲美的開發(fā)和支持資源。

實際應(yīng)用的案例

接下來的部分包括一些用戶實際應(yīng)用的例子,從那個很多系統(tǒng)管理員都很熟悉的快刀斬亂麻式的“Perl拯救那天”的故事,到一些更大的常用應(yīng)用程序。有些故事是從1997年八月19-21號在San Jose,CA召開的第一屆Perl年度大會上拿來的,在會議進展上找來的程序描述上面標上了作者的名字。

案例 1 - 拯救了Netscape技術(shù)支持的程序語言

Dav Amann (dove@netscape.com)

好,我們來看看這個情況。你嶄新的網(wǎng)絡(luò)公司已經(jīng)全面啟動,你賣了多得超出你想象的瀏覽器,服務(wù)器和網(wǎng)絡(luò)應(yīng)用程序,你的公司大踏步的前進,最新的市場調(diào)查顯示你的客戶一年之內(nèi)就已經(jīng)超過了三十萬。

現(xiàn)在唯一討厭的問題是那三十萬買了你的瀏覽器的家伙們可能會碰到點什么問題。他們可能不清楚到底他們要上的網(wǎng)在哪里,他們可能想要找人幫忙,他們可能想要找*你*來給他們技術(shù)支持。

當這種事情發(fā)生的時候,你大概會想:“好吧,那我寫一些技術(shù)文章放到網(wǎng)上。”但是你開始著手這個計劃的時候你會發(fā)現(xiàn),你需要一種內(nèi)容管理系統(tǒng),一種發(fā)布系統(tǒng),一些日志分析,然后收集和報告用戶們在你的網(wǎng)站上的反饋,你早就該做這件事了。

幸運的是你知道Perl,然后你用Perl在三個月時間搞定了所有東西,僅僅靠了4個十分繁忙的技術(shù)支持工程師們的一些業(yè)余時間。

案例 2 - BYTE網(wǎng)站的快刀斬亂麻的轉(zhuǎn)換

BYTE雜志準備要更新它自己的信息網(wǎng)絡(luò)和會議系統(tǒng),BIX,用這個系統(tǒng)編輯和讀者可以交流各種信息。這個會議系統(tǒng)和Usenet很不同,倒和Mail- list有點像??墒窃S多BYTE的編輯都習(xí)慣用Usenet,因為他們一直訂閱Usenet。因此BYTE建了一個接口,把BYTE內(nèi)部的討論組變成了 Usenet系統(tǒng)。使用的語言就是Perl,只用了幾天的時間和不到一百行的程序。

案例 3 - 把客戶的需求轉(zhuǎn)到合適的專家那里

一個世界領(lǐng)先的計算機公司的性能測試小組想把用戶需求的導(dǎo)航自動化。他們想利用企業(yè)內(nèi)部網(wǎng)的設(shè)計解決這個問題,但是確沒有任何經(jīng)費預(yù)算。兩個只有幾周 Perl編程經(jīng)驗的工程師解決了這個問題。Perl腳本對查詢的關(guān)鍵詞進行自動匹配,然后將他們導(dǎo)航到他們要找的專家的網(wǎng)頁。這個CGI程序不僅將客戶指向他想找的專家頁面和E-mail地址,而且自動把他的需求發(fā)送到專家那里。這個解決方案最終只花了短短幾個星期,而且節(jié)省了很多預(yù)算。

案例 4 - email調(diào)查結(jié)果的收集和分析

一個Internet市場調(diào)查公司使用E-mail來做為調(diào)查手段,他們想對得到的一萬個回復(fù)做自動化的分析。于是Perl又派上了用場。Perl腳本產(chǎn)生了SPSS的輸入結(jié)果,雖然實際上Perl本身也可以用來做統(tǒng)計,如果這個統(tǒng)計學(xué)家會用Perl的話。

案例 5 - 跨平臺的評測體系

SPEC(標準性能評測協(xié)會),一個評估計算機系統(tǒng)的工業(yè)協(xié)會,將他們的評測系統(tǒng)從SPEC92升級成SPEC95的時候,將主程序做了巨大的改動。他們希望能比較省力的讓他們的系統(tǒng)能在UNIX以外的平臺下運行。SPEC92系統(tǒng)是使用UNIX shell管理的,不可移植而且沒法擴展。SPEC95系統(tǒng)則使用了一個用Perl寫的可移植和擴展的管理引擎。這個程序充分利用了Perl的面向?qū)ο筇匦?,Perl對C的拓展性,以及Perl的動態(tài)模塊載入。將SPEC95移殖到Windows/NT平臺很容易。移殖到VMS系統(tǒng)的主要難度則在于VMS 缺乏用戶級別的fork方法。

案例 6 – 使用Perl工作的商業(yè)顧問

雖然很多年來我一直使用C語言工作,但是我發(fā)現(xiàn)再沒有理由繼續(xù)使用它了。我十年來的大部分工作都是獲取、管理和轉(zhuǎn)換信息,而不僅僅是數(shù)據(jù)。我參與開發(fā)的應(yīng)用程序不過是帶了圖形界面的信息獲取、管理和轉(zhuǎn)化系統(tǒng)。Perl如今比任何其他的語言都勝任這項工作,不論是腳本語言還是系統(tǒng)編程語言。雖然我最開始只是使用Perl做為粘貼腳本和原型語言,但是現(xiàn)在我已經(jīng)用它來干所有事情。它取代了我的C和UNIX shell程序。雖然,某些情況下我可能還是需要使用C語言,不過我希望Java最終將能夠滿足我的這些需求。

跨平臺的GUI界面如今用HTML或本地運行上都做的很好,比如在企業(yè)內(nèi)部網(wǎng),或者是互聯(lián)網(wǎng)上。

Perl提供了方便的數(shù)據(jù)結(jié)構(gòu)接口以及商業(yè)數(shù)據(jù)庫的界面模塊。它為我提供了系統(tǒng)級的工具用于進程控制,文件管理,以及進程間通訊(只要有socket存在)。它讓我可以用庫,模塊,包,還有子程序等等東西創(chuàng)建我的程序。它還可以讓我寫一些能夠修改自身的程序,雖然看起來有點怪,不過有時候這個很必要。

Perl給我的最大好處在于我只需要原來五分之一的時間就可以完成一個復(fù)雜的任務(wù)。這個對于管理人員和客戶都很有吸引力,不過最感興趣的是那些為這個付錢的人。

案例 7 – Perl做為飛行數(shù)據(jù)分析的快速原型語言

Phil Brown, Mitre 公司高等飛行系統(tǒng)研發(fā)中心(CAASD)(philsie@crete.mitre.org)

由于它的穩(wěn)健和可塑性,它已經(jīng)成為CAASD中很多程序員使用的工具,用來開發(fā)概念模型的快速原型。交通流管理實驗室(T-lab)已經(jīng)在使用數(shù)以百計的 Perl程序,從簡單的數(shù)據(jù)界西和描點制圖,到測算空間領(lǐng)域的復(fù)雜性,并計算飛行器傳過這些領(lǐng)域的飛行時間。這些程序的大小從10行一直到1200行。因為許多這樣的程序都高強度地使用I/O,因此Perl由于其多樣地解析和搜索特性成為完成這些任務(wù)最自然的選擇。

案例 8 – 在線專業(yè)打印

iPrint折扣打印與網(wǎng)絡(luò)文具商店(http://www.)使用一種所見即所得的網(wǎng)絡(luò)桌面發(fā)布程序,直接連結(jié)到后臺的打印機,并且建立在一個復(fù)雜的實時多功能的產(chǎn)品與價格數(shù)據(jù)庫技術(shù)之上。顧客來到這個網(wǎng)站,在線地建立,測試然后預(yù)定定制的打印物品,如名片,信紙,商標,郵票,以及其他東西,特別是一些廣告。

iPrint系統(tǒng)包括一個前臺系統(tǒng)(網(wǎng)站)和后臺進程,免去了操作打印機需要的所有前期手工過程,并為iPrint會計系統(tǒng)提供所有需要的信息。這個系統(tǒng)里接近80000行的程序中95%都使用Perl v5.003寫的,運行在WindowsNT4.0上。iPrint非常依賴RDBMS(SQL服務(wù)器),而所有與服務(wù)器的交互都是用Perl和ODBC 完成的。iPrint使用了包括MIME和Win32::ODBC在內(nèi)的許多CPAN模塊。

案例 9 – Amazon.com的作品編輯系統(tǒng)

Amazon.com使Perl開發(fā)了一個基于CGI的編輯作品系統(tǒng),綜合了寫作(使用Microsoft Word或Emacs),維護(CVS版本控制和使用glimpse方法的搜索),以及輸出(使用正規(guī)SGML工具)的整個流程。

作者先使用CGI程序建立一個SGML文檔,填一個小表格,然后將在用戶的home目錄下產(chǎn)生一個部分完成的SGML文檔,它也可以在Microsoft Windows中被加載。而后作者可以用自己喜歡的編輯器來完成這個文檔。利用CGI程序,用戶可以看到文檔的變化(’cvs diff’)以及用HTML方式在遞交之前看到他們的SGML文檔(’cvs commit’)。作者可以用關(guān)鍵詞搜索SGML庫(使用glimpse方法),以及追蹤版本變化(’cvs log’)。編輯們也可以利用CGI程序建立時間表。

Amazon.com建立了一個基本的SGML精簡類,然后建立了一些子類來進行不同模式下對網(wǎng)站不同部分的提煉(含圖片的HTML或沒有圖片的HTML,將來可能還有PointCast,XML,braille等等)。

所有的代碼都是使用Perl寫的。它使用了CGI以及HTML::Parser模塊。

案例 10 – 新英格蘭醫(yī)院的特殊打印服務(wù)器

新英格蘭地區(qū)的醫(yī)院系統(tǒng)里使用了十二種操作系統(tǒng),從大型機一直到個人電腦系統(tǒng)。同時存在七種不同的網(wǎng)絡(luò)協(xié)議。有將近一萬二千臺PC和兩千臺同一型號的打印機,以及一千臺特殊打印機。這個網(wǎng)絡(luò)分布在整個城區(qū),利用微波,T1,T3以及光纖。我們要做的事情是實現(xiàn)網(wǎng)絡(luò)打印。由于特殊打印機是用來在每個專有網(wǎng)絡(luò)中打印病人的注測和帳戶信息的,它通過轉(zhuǎn)有網(wǎng)絡(luò)連結(jié)在IBM大型主機上。現(xiàn)在的目標是希望使用標準的協(xié)議利用標準的打印機來打印這些文檔。

尋找了各種合適的可擴充打印服務(wù)系統(tǒng)之后,發(fā)現(xiàn)MIT Project Athena的Palladium可以做為不錯的開發(fā)基礎(chǔ)。不過它是獨立打印服務(wù)器系統(tǒng),不符合我們的要求,醫(yī)院需要一種分布式的服務(wù)器。我們花費了兩個月的時間希望將Palladium移殖到醫(yī)院的平臺上然后做些修改,但是最終我們發(fā)現(xiàn)這太不經(jīng)濟了。最后我們決定自己來建立我們要的系統(tǒng),使用Perl做為核心程序,Tcl/Tk做GUI管理界面。Palladium有30000行源代碼,而我們更復(fù)雜的分布式服務(wù)器系統(tǒng)只涌了5000行的Perl以及四個人月的工作量就完成了第一個版本。這個Perl程序在一臺運行UNIX的60MHz的Pentium機器上運行的速度已經(jīng)足夠快,所以沒有必要再用C 重寫任何代碼。

案例 11 – Purdue大學(xué)的網(wǎng)絡(luò)計算中心

在將來,計算處理有可能采取以網(wǎng)絡(luò)為基礎(chǔ)的服務(wù)模式,類似今天的電力供應(yīng)和電話系統(tǒng)的體系構(gòu)架。這種模式需要一種能夠利用網(wǎng)絡(luò)訪問軟件與硬件資源的底層機制。為了實現(xiàn)這個功能,我們開發(fā)了一種基于網(wǎng)絡(luò)的虛擬實驗室(”The Hub”),可以讓使用者利用Netscape這樣的www瀏覽器訪問和運行服務(wù)器上的軟件。

The Hub是一個可以用www訪問的各種模擬工具與相關(guān)信息的收集,它是高度模塊化的系統(tǒng),有接近12000行的Perl代碼。它包含了幾個組成部分:a)通過www訪問的用戶界面。b)提供訪問控制(安全與隱私)以及任務(wù)控制(運行、中止,以及程序狀態(tài)函數(shù))。 c)支持邏輯(虛擬)資源組織與管理。在Hub上,用戶何以:a)上載與操作輸入文件。b)運行程序。 c)瀏覽與下載輸出文件。所有過程都是通過www瀏覽器實現(xiàn)。其內(nèi)部結(jié)構(gòu)是一系列專門的服務(wù)程序(用perl5寫成)組成的分布式實體。這些服務(wù)程序控制了本地和遠端的軟件與硬件資源。硬件資源包括任意的硬件平臺,軟件資源包括該平臺上所有程序。(目前的版本還不支持交互式和基于GUI的程序)

The Hub允許各種工具根據(jù)它們的域被組織在一起并且可以交叉引用。資源可以通過一種特別設(shè)計用來描述工具與硬件特性的語言逐步地向這個系統(tǒng)添加。例如,一個新的設(shè)備可以僅僅通過描述它的型號,運行模式,操作系統(tǒng)等信息便很容易的添加到Hub系統(tǒng)中。類似地,一個新工具軟件可以通過“告訴”Hub系統(tǒng)它的位置,輸入方法(如命令行語句),可以運行在何種機器上(如Sparc5),以何種形式整合到Hub系統(tǒng)中(如電路模擬程序)等等信息來被整合進入Hub系統(tǒng)。這些工作通??梢栽诎胄r內(nèi)完成。

為了實現(xiàn)這種功能,Hub解析URL的方式和標準的面向文檔的web服務(wù)器不同。URL的結(jié)構(gòu)與底層的文件系統(tǒng)分離開來,而采用一種上下文敏感的方式解析(基于服務(wù)器上儲存的用戶詳細狀態(tài)),以此來完成虛擬帳戶和自由存取控制。Lab引擎可以提供它的高性能計算能力給Hub系統(tǒng)隨時調(diào)用。當一個用戶請求運行一個程序時,lab引擎使用用戶指定的輸入文件來決定(通過人工智能子系統(tǒng)-同樣是使用Perl編寫的)使用哪些資源來運行,選擇一個合適的平臺(如工作站解決2-D問題,超級計算機解決3-D問題),將相關(guān)輸入文件傳到相應(yīng)的平臺,通過遠端服務(wù)器啟動程序。當計算結(jié)束之后,遠端服務(wù)器提示lab引擎,然后取回輸出文件,遞交給用戶。

最初的原型系統(tǒng):半導(dǎo)體模擬Hub,包含來自四個大學(xué)的十三個半導(dǎo)體技術(shù)工具程序。在不到一年的時間里,超過250個用戶進行了超過13000次的模擬運算。提供VLSI設(shè)計的Hub,計算機體系結(jié)構(gòu)和并行計算技術(shù)也在最近幾個月被添加進來。目前他們維護了十四個左右的程序。這些Hub系統(tǒng)現(xiàn)在在 purdue大學(xué)的一些本科生課程和研究生課程中被使用,同時也用來協(xié)助合作性的研究。經(jīng)常使用這個系統(tǒng)的包括Puedue大學(xué)的一些學(xué)生和來自歐州和美國不同地區(qū)的一些研究人員。

Copyright ?? 2004 O’Reilly Media, Inc.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多