免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Perl 語言的重要價(jià)值體現(xiàn)

Perl 語言的重要價(jià)值體現(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)用,或是把不同的程序粘起來,以實(shí)現(xiàn)它們的設(shè)計(jì)者們沒有預(yù)見到的功能。Sun的第一位網(wǎng)絡(luò)管理員Hassan Schroeder評(píng)論道:“Perl是英特網(wǎng)的傳送帶/血管。”

Perl最初是由Larry Wall為UNIX開發(fā)的一種腳本語言,其目的是為了將UNIX shell的易用性和編程語言(比如C)的強(qiáng)大功能與可塑性結(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編程的主要語言。

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

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

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

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

為什么/何時(shí)要用腳本語言?

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

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

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

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

系統(tǒng)管理員們是最早利用腳本語言的強(qiáng)大功能的人。任何一個(gè)操作系統(tǒng)中,都存在這種問題。一般是為了自動(dòng)完成某種重復(fù)性的工作。即使Macintosh系統(tǒng)也需要一些用戶定義的自動(dòng)操作。任務(wù)可能很簡單,比如自動(dòng)備份和恢復(fù)系統(tǒng),或者很復(fù)雜,比如周期性地儲(chǔ)存硬盤上所有文件,或者存儲(chǔ)二十四小時(shí)內(nèi)所有系統(tǒng)設(shè)置的改動(dòng)。有些時(shí)候已經(jīng)有這樣的工具可以完成這些工作,但自動(dòng)操作需要有控制程序來啟動(dò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的獨(dú)特在于他打破了腳本語言與某個(gè)操作系統(tǒng)的緊密聯(lián)系,而成為了一種在多個(gè)平臺(tái)下廣泛使用的腳本語言。

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

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

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

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

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

解釋語言與編譯語言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖形界面

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

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

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

多線程

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

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

Win32系統(tǒng)上的Perl

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

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

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

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

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

擴(kuò)展Perl的力量

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

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

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

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

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

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

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

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

Dav Amann (dove@netscape.com)

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

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

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

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

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

BYTE雜志準(zhǔn)備要更新它自己的信息網(wǎng)絡(luò)和會(huì)議系統(tǒng),BIX,用這個(gè)系統(tǒng)編輯和讀者可以交流各種信息。這個(gè)會(huì)議系統(tǒng)和Usenet很不同,倒和Mail- list有點(diǎn)像。可是許多BYTE的編輯都習(xí)慣用Usenet,因?yàn)樗麄円恢庇嗛哢senet。因此BYTE建了一個(gè)接口,把BYTE內(nèi)部的討論組變成了 Usenet系統(tǒng)。使用的語言就是Perl,只用了幾天的時(shí)間和不到一百行的程序。

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

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

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

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

案例 5 - 跨平臺(tái)的評(píng)測體系

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

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

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

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

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

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

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

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

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

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

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

iPrint系統(tǒng)包括一個(gè)前臺(tái)系統(tǒng)(網(wǎng)站)和后臺(tái)進(jìn)程,免去了操作打印機(jī)需要的所有前期手工過程,并為iPrint會(huì)計(jì)系統(tǒng)提供所有需要的信息。這個(gè)系統(tǒng)里接近80000行的程序中95%都使用Perl v5.003寫的,運(yùn)行在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ā)了一個(gè)基于CGI的編輯作品系統(tǒng),綜合了寫作(使用Microsoft Word或Emacs),維護(hù)(CVS版本控制和使用glimpse方法的搜索),以及輸出(使用正規(guī)SGML工具)的整個(gè)流程。

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

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

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

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

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

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

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

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

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

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

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

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

Copyright ?? 2004 O’Reilly Media, Inc.

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
小話計(jì)算機(jī)編程語言及其用武之地(拼湊之作,歡迎大家拍磚)
選擇學(xué)習(xí)“下一個(gè)”程序語言#more-429
服務(wù)器腳本語言PHP簡介
網(wǎng)頁編程語言
腳本語言
編程語言發(fā)展
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服