Perl语言的重要价值体现Word文档格式.docx
- 文档编号:16580034
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:9
- 大小:31.06KB
Perl语言的重要价值体现Word文档格式.docx
《Perl语言的重要价值体现Word文档格式.docx》由会员分享,可在线阅读,更多相关《Perl语言的重要价值体现Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
Perl在处理文本方面无以伦比的能力,如正则表达式等强大特性。
当网络文本(HTML)重新兴起而成为所有应用软件和系统的网络“外交语言”后,这一点变得尤其重要。
分布式的开发团队以一种以有机的、进化式的方式,跟随着快速变化的需求。
一种好的脚本语言应该是一种高级软件开发语言,既能够快速地开发小工具,同时又拥有开发复杂程序所需要的工作流与数据组织形式。
执行速度一定要快。
在调用系统资源如文件操作,内部进程通信,进程控制等方面一定要有效率。
一种好的脚本语言应该可以运行在所有流行的操作系统上,适合信息处理(自由文本格式)和数据处理(数字与二进制数据)。
它要可插入,可扩展。
Perl符合了上面所有的标准。
为什么/何时要用脚本语言?
JohnOusterhout在他的文章中有力地阐述道,脚本:
二十一世纪的高层次程序语言。
“像Perl和Tcl这样的脚本语言代表了一种与C或Java这样的系统程序语言非常不同的编程风格。
脚本语言是被设计来“粘着”应用程序的;
它们使用无类型的方法以达到比系统程序语言更高层次和更快捷的应用程序开发。
计算机速度的提升和各种应用程序的混和与变化正使得在未来脚本语言变得越来越重要。
Ousterhout继续道:
就在我们接近二十世纪的尾声的时候,人们编写程序的方法发生了一个跟本性的转变。
这个转变是人们从C和C++这样的系统程序语言转向了Perl或Tcl这样的脚本语言。
虽然许多人正处于这样的转变之中,但很少人意识到了它的发生,更少有人明白它为什么在发生....
脚本语言是被设计来完成与系统程序语言所不同的任务的,这导致了它们之间根本性的差异。
系统程序语言的设计是从底层开始建立数据结构和算法,从最初级的计算机元素如内存单元开始。
与之相反,脚本语言被设计用来做“胶着”的工作:
它们假定已经存在很多有效的组件,然后将它们连接起来。
系统程序语言使用严格的数据类型来控制复杂性,而脚本语言则没有数据类型,以便方便地连结组件并提供快速开发应用程序的能力。
脚本语言和系统程序语言是互补的,而且从60年代起主要的操作系统都同时支持它们。
然而,近期的一些趋势,如更快的计算机、更好的脚本语言的出现,图形用户界面和组件体系结构的重要性不断增加,和英特网的发展,使得脚本语言的应用大大拓展。
脚本语言将有越来越多的应用,而系统程许语言则主要被用来开发各种组件,这样的趋势在下个十年中还会继续。
系统管理员们是最早利用脚本语言的强大功能的人。
任何一个操作系统中,都存在这种问题。
一般是为了自动完成某种重复性的工作。
即使Macintosh系统也需要一些用户定义的自动操作。
任务可能很简单,比如自动备份和恢复系统,或者很复杂,比如周期性地储存硬盘上所有文件,或者存储二十四小时内所有系统设置的改动。
有些时候已经有这样的工具可以完成这些工作,但自动操作需要有控制程序来启动它们,提取和转化它们的输出,以及协调这些程序的工作。
许多系统都内置了一些脚本语言,如VMS的DCI,MS-DOS的BAT文件,UNIX的shell脚本,IBM的Rexx,Windows的VisualBasicandVisualBasicforApplications,还有Applescripts都是专用于某种系统的脚本语言的好例子。
Perl的独特在于他打破了脚本语言与某个操作系统的紧密联系,而成为了一种在多个平台下广泛使用的脚本语言。
有些脚本语言,特别是Perl和VisualBasic,或者算上Tcl和Python,都做为多用途的语言而被广泛使用。
成功的脚本语言一个长处在于它们很容易调用操作系统功能/服务。
更高一层次来说,做为一种多用途的脚本语言,它们必须稳健到你可以使用它们编写复杂应用程序的程度。
脚本语言可以用来编写原型,建模和做测试,但当脚本语言运行足够迅速和稳健的时候,原型就直接成为了应用程序。
那么,为什么不使用那些多用途的程序语言如C,C++或Java替代脚本语言呢?
答案很简单:
成本。
开发时间比硬件和内存更昂贵。
脚本语言容易学习并且使用起来很简单。
正如Ousterhout指出的,脚本语言通常没有什么数据类型概念。
脚本不区分整数和浮点数,变量是没有类型的。
这是脚本语言善于快速开发的原因之一。
大概念是“不着急处理细节”。
因为脚本语言擅长调用系统工具来做难做的事情(如拷贝文件和建立目录或文件夹),尚未实现的细节就可以用编译语言易于写成的小程序来处理。
对于编译语言来说数据类型有什么用呢?
它使得内存管理更加容易,但对于程序员来说更难了。
想想看:
当FORTRAN流行的时候一个程序员赚多少钱一小时?
内存值多少钱?
而现在呢?
时代变了。
内存便宜,程序员很贵!
系统语言必须把任何东西都写出来,这使得编译复杂数据结构更容易,但是程序员更难编写。
脚本语言尽量多地自己做出假定,尽量少地要求明确指定。
这让脚本语言更容易学习,写起来也更快。
其代价是编写复杂的数据结构和算法时很困难。
但是Perl在复杂数据结构和算法方面都做得很好,同时也没有牺牲写简单程序时的简便。
解释语言与编译语言
绝大多数脚本语言都是解释型语言,感觉上好像不适合大型程序项目。
这种说法是应该要纠正的。
确实,除某些有硬件特异性的语言之外,大部分情况下解释型语言程序都比编译语言要慢。
解释型语言的优势在于,它写的程序在解释器所能安装的任何系统上都可以运行。
解释器负责处理那些系统特异性的细节问题,而不是应用程序本身。
(当然也有例外,比如这个应用程序可能调用了某个不可移殖的系统特性)
操作系统命令解释器如MS-DOS的以及早期版本的UNIXCshell是解释器运行的很好例子:
脚本里的命令一条一条都喂到解释器里去。
对于效率影响最大的就是循环:
循环中的每一条命令在每次运行的时候都重新解释。
有些人认为所有的解释型语言都这么...缓慢、低效、一次一行。
不过事实并不是这样。
实际上有一些中间型语言,运行的时候被编译成某些中间码,然后被解释器装载运行。
Java就是一个例子,这让它成为了一种很有价值的跨平台语言。
所有在不同硬件上的java解释器都能交流并共享数据和进程资源。
对于嵌入系统来说这是非常棒的,因为嵌入系统实际上就是一种特殊目的的硬件。
然而Java并不是一种脚本语言。
它需要数据声明,而且是预先编译的。
(除非你把实时编译也算在内—虽然它实际上只是生成代码)
Perl也是一种中间型语言。
Perl代码根据需要一块一块地进行编译,所不同的是编译好的可执行部分被存在内存中而不是写成文件。
任何一块Perl代码块只被编译一次。
Perl在设计上的优势使得所有这些优化都很值得。
Perl保留了解释语言的可移殖性,又有了接近编译语言的执行速度。
已经快经历了十年历史的Perl,拥有数十万的开发者,现在又将经历它的五次脱胎换骨,它运行得既简洁又迅速。
虽然在启动的时候可能会有一些延迟,因为需要一些时间编译代码,但是相对于代码执行的时间来说这很短暂。
而且,像”fastCGI”这样的技术可以将反复执行的脚本镜像存在保留在内存中来避免启动延迟,除非这个脚本是第一次运行。
不管怎么说,Perl5.005将有一个由牛津大学的MalcolmBeattie所写的编译器。
这个编译器将消除编译过程中的启动延迟,并加入一些小的加速技术。
它也消除了某些编写商业应用程序的程序员对脚本语言的生理恐惧。
(使用编译器之后,其他人将无法再看到源代码)
信息处理与数据处理
互联网只是我们与计算机交流形式的许多巨大变化中的一个。
这个改变在我们对工业的称乎中就能看得出来。
过去它被称为“数据处理”,比如说:
“如果我想中午拿到数据处理的结果的话,就得早上四点中把东西递交到数据中心去。
”现在我们将它称为“信息服务”,比如“信息服务部的头正和我们的计划委员会一起工作”。
兴趣和重点现在放在了“信息”而不是“数据”上。
很明显,现在我们更关心信息,而信息往往同时包括文本和数据,而不仅仅是数据。
Perl在处理信息方面是很优秀的。
Perl处理信息方面的很大一部分能力来源于一种叫做正则表达式的特殊语法。
正则表达式赋予了Perl极大的处理和操作自由文本中的模式的能力。
其他语言也有支持正则表达式的,(Java甚至有自由/免费的正则表达式库),但是没有一种能像Perl一样结合得这么好。
很多年以来,总的趋势一直都是将文本文件整合到特殊的应用文件格式中。
唯有Unix,将ASCII文本定义为统一的程序文件交换格式,而其他的那些系统则让不兼容的文件格式越来越多。
急剧扭转了这个趋势的,是互联网的出现。
它的HTML数据格式是由有标记的ASCII文本组成的。
由于互联网的重要性,HTML—以及与它相伴的ASCII文本—如今处在数据交换格式的中心地位,几乎所有的应用程序都可以输出它。
微软甚至计划提供HTML方式的桌面。
HTML的继承者,XML(可扩展标记语言)如今已被广泛认为将成为混和环境下的标准文件交换格式。
HTML的强大显著地增强了Perl的力量。
它是种理想的语言,无论是在核实用户输入在HTML表格中的内容,操作大量HTML内容,还是提取和分析各种/海量log文件的时候。
这只是Perl处理文本强大能力的一方面。
Perl不仅给你许多分解数据的方法,还给你许多将数据粘回一起的办法。
因此Perl在处理信息流并重新组装方面也很理想。
可以很轻易地将信息转换后输入另一个程序或进行分析汇总。
有人说下一代的应用程序将不会是现在这些程序的样子,而是“信息化应用程序”,其中文本将构成大部分的用户界面。
假想一个典型的企业内部网的应用程序系统:
一个人力资源系统,雇员通过它来选择哪个公共基金会来投资他们的养老金,随时了解他们帐户里的数目,并取得相应信息来帮助他们投资。
这个系统的界面将包含许多信息化的文档(一般是以HTML的形式),一些基于表格的简单CGI程序,以及到后台实时股票行情系统的链接(可能是英特网上的服务)。
利用传统的编程技术建立这样一个系统是很不实际的。
任何一个公司的投资策略都会有不同,传统编程技术投入的巨大工作量在这样一个局限的项目里无法得到回报。
而用web做为前台,利用perl脚本完成链接到后台数据库的任务的话,你可能不需要很多时间就能完成这样一个系统。
或者来看看A,它可能是最成功的新网络经济的例子了。
Amazon提供一个信息前台,以及一个后台数据库和订单系统,然后——你猜对了——用perl将它们连在了一起。
Perl对数据库的链接是由一组被功能强大的数据库独立界面支持的,它们被称为DBI。
Perl+fast-cgi+DBI可能是互联网上使用最广泛的数据库链接/连接系统了。
ODBC模块也可以提供类似功能。
考虑到Perl强大的前台文本处理能力,以及后台的数据库链接功能,因此你应该开始明白为什么Perl在新一代信息化应用中会起到越来越重要的作用了。
Perl的模式匹配和处理功能在其他方面的应用包括生物医学研究,以及数据挖掘。
任何大的文本数据库,从人类基因组计划的基因序列分析到某些大网站的日志文件分析,都可以用Perl来处理。
最终Perl进一步被用来做基于网络的研发和专门的英特网搜寻应用。
在模式匹配和网络socket开发方面的优势成为英特网的通讯方面的基石,也使Perl成为建立网络机器人的最佳语言,这些机器人用于在英特网上查找关键信息。
Perl用来开发应用
开发人员越来越认识到Perl作为一种应用开发语言的功用。
Perl使得传统语言没法做到的项目成为可能。
并不只因为Perl开发简单,它也可以足够复杂,在需要的时候甚至使用最高级的面向对象语言技术。
在编制基于socket的客户端-服务器应用程序的时候Perl比C或C++要简单。
用Perl编写自由文本处理程序比任何语言都更简单。
Perl有一个由Perl写成的成熟的调试器,以及许多选项可以用来建立安全的应用程序。
几乎任何一方面的应用都有免费的Perl模块可以使用,当需要的时候便可以动态加载。
Perl可以很容易的用编译好的C/C++甚至Java写的函数进行扩展。
这表明调用一些还没用Perl写的功能或系统服务也很容易。
当在非UNIX系统下运行的时候,由于可以调用这个系统的特殊功能,因此这种拓展能力变得更加有价值。
Perl也可以在编译程序中被调用,或者被插入到其他语言编写的程序中。
人们正在建立一种标准的方法,将Perl整合到Java中去,也就是说Java的类将可以用Perl来写。
目前为止,这些程序需要内嵌Perl解释器。
不过1997年的第四季度O’Reilly&
Associates的Perl资源工具箱将包含一个新的后台编译器,将Perl编译为Java字节码以解决这个问题。
图形界面
由于Perl是在UNIX系统下开发的,ASCII终端是主要的输入输出设备(即使是像X一样的图形系统也包含了单独窗口的字符终端),因此Perl并没有定义固有的图形界面(不过在今天这样群雄割据的图形界面的世界里这大概也算一种特性)。
Perl采用扩展模块来创见图形界面的程序。
使用最广泛的就是Tk,其实最早它是为Tcl脚本语言开发的图形工具包,不过很快就被移殖到了Perl上。
Tcl依然专注于X-Window系统,虽然她已经开始被移殖到微软的Windows系统上。
然而,如前所说,开发固有的图形界面已经变得不那么重要,因为web正逐渐成为多数应用程序标准的图形界面。
“webtop”做为通用的跨平台应用正在快速的取代“desktop”。
只要写一个“webtop”便可以用在UNIX,Mac,Windows/NT,Windows/95…任何一个有网页浏览器的系统。
实际上,越来越多的网站采用Perl和web来为一些传统的程序创建更简单易用的界面。
比如Purdue大学网络计算中心为三十种电路模拟工具设计了一个网页界面,使用Perl从使用者填好的表格中提取数据并转化为命令行,发给Hub上连着的程序。
多线程
线程是做并行处理的很好的解决方法,尤其是当你在写双向通讯或事件驱动的程序的时候。
1997年早些时候Perl已经有了一个多线程的补丁。
在97年第四季度Perl5.005出现的时候,它将被整合进标准发布当中。
Perl一直支持的多任务模型是“fork”和“wait”。
最小的调度单位是进程,它适用于UNIX。
Windows/NT的多线程机制并不太一样,因此Perl的可移殖性目前便受到了限制。
不过如果在进程控制和其他应用之间建立抽象层,问题就解决了。
而且,调和UNIX和Win32系统Perl接口的进程控制代码的工作正在进行,1997年的第四季度就会完成。
Win32系统上的Perl
6年,微软委托ActiveWare网络公司(现在的ActiveState公司)为NT资源库创建一个Perl与Win32系统的接口。
如今网络上到处都可以见到这个移植版本,据说接近一半的Perl源代码下载都是用在Win32平台上的。
Perl进入像NT这样的Win32平台是有很多原因的。
尽管有VisualBasic和VisualBasicforApllications存在,Win32平台上的脚本语言支持依然比较弱。
虽然VB是解释型脚本语言,但它依然是一种类型化的语言,用起来比较繁琐。
而且它也没有像Perl那样强大的字符串处理能力。
当建立大型NT站点的时候,系统管理员们则明显的认识到图形用户界面的限制,对于管理数百台计算机来说脚本语言是必须的。
很多时候会有这种情况,一些有经验的系统管理员常常被叫去管理那些不使用UNIX系统的站点,这时使用Perl是将UNIX的优点带到其他系统去的好办法。
你也不能低估web的影响力量。
现在网上有数以千计用Perl编写的CGI程序和站点管理工具,支持Perl对于任何服务器平台说都是必需的。
对于Microsoft的NT服务器来说,O’Reilly和Netscape更显得重要,对Perl的支持是必须的。
ActiveState的PerlScript?
?
可以让Perl在支持ASP的NT网络服务器,如Microsoft的IIS和O’Reilly的WebSite中的动态脚本引擎上运行。
除了核心的Perl语言解释器之外,ActiveStatePerl的Win32?
接口还包括特别针对Win32环境的模块。
比如它提供了对自动操作对象的全面支持。
随着越来越多的Windows系统资源和组件支持Perl端口,Win32版本的Perl将能够使用越来越多的系统功能。
扩展Perl的力量
和Microsoft的VisualBasic或Sun的Java不同,Perl没有一个巨大的公司为它撑腰。
Perl最初是由LarryWall开发并做为自由软件发布的。
Larry后来开发Perl的工作是通过一个邮件组,在大概两百个合作者的帮助下进行的,这个邮件组叫做perl5-porters。
最初这个邮件组是为了将Perl推向其他平台而建立的,但最终它成为开发Perl核心代码的贡献者们的聚集之处。
Perl5添加了一个扩展机制,独立的模块可以利用这个机制动态地加载到Perl程序之中。
这导致了如今数百个附加模块的开发,其中许多重要的模块现在已经成为了Perl标准发行版本的一部分。
附加的模块可以在综合Perl存档网络(CPAN)上得到。
最好的进入CPAN的界面大概是[url][/url],那里还包括许多书评,文章以及其他一些Perl程序员和使用者们关心的信息。
过去对使用自由软件曾经有的偏见,如今已经被粉碎了,因为人们认识到过去这些年来有许多最重大的计算机技术突破是从自由软件社区中产生的。
Internet本身很大程度上就是一个合作的自由软件项目,而且它的发展也是被那些自发组织的有远见的开发者所引导。
类似的,在网络服务器平台中占有很大一块市场的是Apache,它也是一个自由软件项目,由大量的合作开发者社团创立,拓展和管理的。
除了持续不断的开发之外,Perl社区还通过新闻组和邮件提供活跃的技术支持。
同时还存在无数咨询及付费的技术支持项目。
无数的书籍提供了极好的文档材料,包括其中最著名的。
ProgrammingPerl,作者是LarryWall,RandalSchwarz和TomChirstiansen。
ThePerlJournal和[url][/url]提供关于一些最新进展的信息。
总的来说,由于巨大的开发者团体和自由软件社区合作的传统,Perl具有和可以和最大的公司媲美的开发和支持资源。
实际应用的案例
接下来的部分包括一些用户实际应用的例子,从那个很多系统管理员都很熟悉的快刀斩乱麻式的“Perl拯救那天”的故事,到一些更大的常用应用程序。
有些故事是从1997年八月19-21号在SanJose,CA召开的第一届Perl年度大会上拿来的,在会议进展上找来的程序描述上面标上了作者的名字。
案例1-拯救了Netscape技术支持的程序语言
DavAmann(dove@)
好,我们来看看这个情况。
你崭新的网络公司已经全面启动,你卖了多得超出你想象的浏览器,服务器和网络应用程序,你的公司大踏步的前进,最新的市场调查显示你的客户一年之内就已经超过了三十万。
现在唯一讨厌的问题是那三十万买了你的浏览器的家伙们可能会碰到点什么问题。
他们可能不清楚到底他们要上的网在哪里,他们可能想要找人帮忙,他们可能想要找*你*来给他们技术支持。
当这种事情发生的时候,你大概会想:
“好吧,那我写一些技术文章放到网上。
”但是你开始着手这个计划的时候你会发现,你需要一种内容管理系统,一种发布系统,一些日志分析,然后收集和报告用户们在你的网站上的反馈,你早就该做这件事了。
幸运的是你知道Perl,然后你用Perl在三个月时间搞定了所有东西,仅仅靠了4个十分繁忙的技术支持工程师们的一些业余时间。
案例2-BYTE网站的快刀斩乱麻的转换
BYTE杂志准备要更新它自己的信息网络和会议系统,BIX,用这个系统编辑和读者可以交流各种信息。
这个会议系统和Usenet很不同,倒和Mail-list有点像。
可是许多BYTE的编辑都习惯用Usenet,因为他们一直订阅Usenet。
因此BYTE建了一个接口,把BYTE内部的讨论组变成了Usenet系统。
使用的语言就是Perl,只用了几天的时间和不到一百行的程序。
案例3-把客户的需求转到合适的专家那里
一个世界领先的计算机公司的性能测试小组想把用户需求的导航自动化。
他们想利用企业内部网的设计解决这个问题,但是确没有任何经费预算。
两个只有几周Perl编程经验的工程师解决了这个问题。
Perl脚本对查询的关键词进行自动匹配,然后将他们导航到他们要找的专家的网页。
这个CGI程序不仅将客户指向他想找的专家页面和E-mail地址,而且自动把他的需求发送到专家那里。
这个解决方案最终只花了短短几个星期,而且节省了很多预算。
案例4-email调查结果的收集和分析
一个Internet市场调查公司使用E-mail来做为调查手段,他们想对得到的一万个回复做自动化的分析。
于是Perl又派上了用场。
Perl脚本产生了SPSS的输入结果,虽然实际上Perl本身也可以用来做统计,如果这个统计学家会用Perl的话。
案例5-跨平台的评测体系
SPEC(标准性能评测协会),一个评估计算机系统的工业协会,将他们的评测系统从SPEC92升级成SPEC95的时候,将主程序做了巨大的改动。
他们希望能比较省力的让他们的系统能在UNIX以外的平台下运行。
SPEC92系统是使用UNIXshell管理的,不可移植而且没法扩展。
SPEC95系统则使用了一个用Perl写的可移植和扩展的管理引擎。
这个程序充分利用了Perl的面向对象特性,Pe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Perl 语言 重要 价值 体现