Perl 语言的重要价值体现


系统管理员们是最早利用脚本语言的强大功能的人。任何一个操作系统中,都存在这种问题。一般是为了自动完成某种重复性的工作。即使Macintosh系统也需要一些用户定义的自动操作。任务可能很简单,比如自动备份和恢复系统,或者很复杂,比如周期性地储存硬盘上所有文件,或者存储二十四小时内所有系统设置的改动。有些时候已经有这样的工具可以完成这些工作,但自动操作需要有控制程序来启动它们,提取和转化它们的输出,以及协调这些程序的工作。

许多系统都内置了一些脚本语言,如VMS的DCI,MS-DOS的BAT文件,unix的shell脚本,IBM的Rexx,Windows的 Visual Basic and Visual Basic for Applications,还有Applescripts都是专用于某种系统的脚本语言的好例子。Perl的独特在于他打破了脚本语言与某个操作系统的紧密联系,而成为了一种在多个平台下广泛使用的脚本语言。

有些脚本语言,特别是Perl和Visual Basic,或者算上Tcl和Python,都做为多用途的语言而被广泛使用。成功的脚本语言一个长处在于它们很容易调用操作系统功能/服务。更高一层次来说,做为一种多用途的脚本语言,它们必须稳健到你可以使用它们编写复杂应用程序的程度。脚本语言可以用来编写原型,建模和做测试,但当脚本语言运行足够迅速和稳健的时候,原型就直接成为了应用程序。

那么,为什么不使用那些多用途的程序语言如C,C++Java替代脚本语言呢?答案很简单:成本。开发时间比硬件和内存更昂贵。脚本语言容易学习并且使用起来很简单。

正如Ousterhout指出的,脚本语言通常没有什么数据类型概念。脚本不区分整数和浮点数,变量是没有类型的。这是脚本语言善于快速开发的原因之一。大概念是“不着急处理细节”。因为脚本语言擅长调用系统工具来做难做的事情(如拷贝文件和建立目录或文件夹),尚未实现的细节就可以用编译语言易于写成的小程序来处理。

对于编译语言来说数据类型有什么用呢?它使得内存管理更加容易,但对于程序员来说更难了。想想看:当FORTRAN流行的时候一个程序员赚多少钱一小时?内存值多少钱?而现在呢?时代变了。内存便宜,程序员很贵!

系统语言必须把任何东西都写出来,这使得编译复杂数据结构更容易,但是程序员更难编写。脚本语言尽量多地自己做出假定,尽量少地要求明确指定。这让脚本语言更容易学习,写起来也更快。其代价是编写复杂的数据结构和算法时很困难。但是Perl在复杂数据结构和算法方面都做得很好,同时也没有牺牲写简单程序时的简便。

解释语言与编译语言
绝大多数脚本语言都是解释型语言,感觉上好像不适合大型程序项目。这种说法是应该要纠正的。
确实,除某些有硬件特异性的语言之外,大部分情况下解释型语言程序都比编译语言要慢。解释型语言的优势在于,它写的程序在解释器所能安装的任何系统上都可以运行。解释器负责处理那些系统特异性的细节问题,而不是应用程序本身。(当然也有例外,比如这个应用程序可能调用了某个不可移殖的系统特性)

操作系统命令解释器如MS-DOS的command.com以及早期版本的unix C shell是解释器运行的很好例子:脚本里的命令一条一条都喂到解释器里去。对于效率影响最大的就是循环:循环中的每一条命令在每次运行的时候都重新解释。有些人认为所有的解释型语言都这么...缓慢、低效、一次一行。不过事实并不是这样。

实际上有一些中间型语言,运行的时候被编译成某些中间码,然后被解释器装载运行。Java就是一个例子,这让它成为了一种很有价值的跨平台语言。所有在不同硬件上的Java解释器都能交流并共享数据和进程资源。对于嵌入系统来说这是非常棒的,因为嵌入系统实际上就是一种特殊目的的硬件。然而Java并不是一种脚本语言。它需要数据声明,而且是预先编译的。(除非你把实时编译也算在内—虽然它实际上只是生成代码)

Perl也是一种中间型语言。Perl代码根据需要一块一块地进行编译,所不同的是编译好的可执行部分被存在内存中而不是写成文件。任何一块Perl代码块只被编译一次。Perl在设计上的优势使得所有这些优化都很值得。Perl保留了解释语言的可移殖性,又有了接近编译语言的执行速度。已经快经历了十年历史的Perl,拥有数十万的开发者,现在又将经历它的五次脱胎换骨,它运行得既简洁又迅速。虽然在启动的时候可能会有一些延迟,因为需要一些时间编译代码,但是相对于代码执行的时间来说这很短暂。而且,像”fast CGI”这样的技术可以将反复执行的脚本镜像存在保留在内存中来避免启动延迟,除非这个脚本是第一次运行。

不管怎么说,Perl 5.005将有一个由牛津大学的Malcolm Beattie所写的编译器。这个编译器将消除编译过程中的启动延迟,并加入一些小的加速技术。它也消除了某些编写商业应用程序的程序员对脚本语言的生理恐惧。(使用编译器之后,其他人将无法再看到源代码)

信息处理与数据处理
互联网只是我们与计算机交流形式的许多巨大变化中的一个。这个改变在我们对工业的称乎中就能看得出来。过去它被称为“数据处理”,比如说:“如果我想中午拿到数据处理的结果的话,就得早上四点中把东西递交到数据中心去。”现在我们将它称为“信息服务”,比如“信息服务部的头正和我们的计划委员会一起工作”。兴趣和重点现在放在了“信息”而不是“数据”上。很明显,现在我们更关心信息,而信息往往同时包括文本和数据,而不仅仅是数据。Perl在处理信息方面是很优秀的。
Perl处理信息方面的很大一部分能力来源于一种叫做正则表达式的特殊语法。正则表达式赋予了Perl极大的处理和操作自由文本中的模式的能力。其他语言也有支持正则表达式的,(Java甚至有自由/免费的正则表达式库),但是没有一种能像Perl一样结合得这么好。

很多年以来,总的趋势一直都是将文本文件整合到特殊的应用文件格式中。唯有unix,将ASCII文本定义为统一的程序文件交换格式,而其他的那些系统则让不兼容的文件格式越来越多。急剧扭转了这个趋势的,是互联网的出现。它的HTML数据格式是由有标记的ASCII文本组成的。由于互联网的重要性, HTML—以及与它相伴的ASCII文本—如今处在数据交换格式的中心地位,几乎所有的应用程序都可以输出它。微软甚至计划提供HTML方式的桌面。 HTML的继承者,XML(可扩展标记语言)如今已被广泛认为将成为混和环境下的标准文件交换格式。

HTML的强大显著地增强了Perl的力量。它是种理想的语言,无论是在核实用户输入在HTML表格中的内容,操作大量HTML内容,还是提取和分析各种/海量log文件的时候。

这只是Perl处理文本强大能力的一方面。Perl不仅给你许多分解数据的方法,还给你许多将数据粘回一起的办法。因此Perl在处理信息流并重新组装方面也很理想。可以很轻易地将信息转换后输入另一个程序或进行分析汇总。
共7页 首页 上一页 [1] [2] [3] [4] [5下一页 尾页>
上一篇: 优化你的 Perl 代码
下一篇: Class::DBI
字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z