PERL和Python的比较研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Perl和Python的比较研究

随着系统管理的复杂化和网络运用的扩展,脚本语言在实际编程中的应用越来越广泛。传统观念是:一般的高级语言如C/C++,Java,Delphi等用来编写主要的功能组件,如java的类和beans,用C/C++写的动态连接库,用VisualBasic写的控件等,而脚本语言如JavaScript,Vbscript,perl,python,sh等通常认为脚本语言是介于HTML应用的发展和脚本语言本身的发展,脚本语言的应用早就超出仅仅作为常规编程语言的辅助角色而用来直接开发应用系统,著名的网络流控制系统mrgt就是用perl开发的。现在的脚本语言,其功能甚至强大到可以和一般高级语言相媲美,而且引入较新的程序机制和技术(如OO和异常处理),加上固有的简单易用,逐渐发展为程序开发的一支主流。脚本语言的基本特征是语法简单,跨平台,类型宽松,解释执行。早期的脚本语言?本文选择现今在自由软件开发里很具代表性和广泛使用的两种脚本语言perl和python进行比较研究,以期使读者能对这两种脚本语言的基本特点和新发展有一定的了解。

一、 两者初识

Perl(可以看作Practical Extraction And Reporting Language的首字母)语言最早由Larry Wall开发,原始动机即作为一个文本提取和报告的实用语言,本来是基于UNIX系统,后来发展成能运行于几乎所有的机器体系和操作系统。Larry Wall是坚实的免费软件拥护者,所以perl也成为免费软件之一(但不属GNU),按自由免费软件的一般模式发展和传播(perl中的源代码、标准库文件、可选模块及所有文档都免费提供,并被用户团体所支持)。从1988年的最初诞生,到现在的perl 6系列版本,perl能够如此稳健蓬勃的发展是和它自由免费、简单高效(语法上象C和Unix的sh,解释执行前会简单编译,有点象java)、强可扩展性、数据类型灵活、面向对象以及有强大规范的用户团体交流(CPAN, Comprehensive Perl Archive Network)和幕后支持组织(CPAST, Comprehensive Perl Arcana Society Tapestry)分不开的。

Python最初出现在2000年前后,名字来源一喜剧团体Monty Python,并无实际代表意义。Python最初由Guido van Rossum及其合作者设计开发,后来python开发小组多次重组,最终到Digital Creations。Python和perl一样是在迅速稳定发展,目前的一个著名成功业绩是Digital Creations开发的zope,下一代开放源码应用服务器以及门户工具。从抽象的功能和特点来说,python是和perl 最相像的语言,可能和perl的成功和python的较晚出现有关。和perl一样,python 也是自由免费、简单高效、强可扩展性、数据类型灵活、面向对象的。并且python 的功能相对更强大,更易于编写大程序,核心又较小。尽管从抽象的角度,perl 和python两者有很大的相似,但作为不同的语言,他们却是又有许多差别,下文从几个主要的方面对两者进行深入的比较研究,尽量能找出它们的异同并对它们一些进行原理和模型层次的探讨。

下面我们先来看一下如何用这两个语言实现最简单的“hello!”程序,先对它们有个大概的印象。在perl情形,先选择一个你比较喜欢的文本编辑器编写hello.pl程序如下:

#This is a hello saying demo

print “what is your name?\n”;

$name=;

print “hello $name!”;

在终端或命令行输入perl hello.pl或直接输入hello.pl程序将被解释执行,提示输入你的名字,输入名字xiao rong后程序在屏幕输出“hello xiao rong!”。

Python脚本运行有两种方式,一种是交互式的,一种是自动运行脚本。交互式是在命令行输入python,然后进入交互状态(>>>为主提示符,…为从提示符):ActivePython 2.4.1 Build 245 (ActiveState Corp.) based on

Python 2.4.1 (#65, Mar 30 2005, 09:33:37) [MSC v.1310 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> name=raw_input("what is your name?\n")

what is your name?

xiao rong

>>> print "hello, ",name,"!"

hello, xiao rong !

>>>

或者编好脚本文件hello.py如下:

name=raw_input(“what is your name?\n”)

print "hello, ", name, "!"

然后在命令行输入python hello.py或hello.py发生的情形和perl一样。

所以从顶层模型来看,perl是一个完整的perl脚本输入自动执行。一个perl 脚本文件和C/C++源程序类似,由一些语句和语句块组成,语句由“;”分隔,语句块由一对“{}”包括。而python脚本既可自动执行,又能交互式运行。而且python特别的一个地方使它采取缩进来标示分界和层次,不同于一般语言采用”;”和”{}”。这种缩进方式的程序在运行时依赖一个栈来记录逻辑行的INDENT (缩进)和DEDENT(抽出)。在读入脚本文件第一行之前,有个数值0压入栈底,这个0直到脚本运行完是不会被弹出的。压进栈中的的数值是从底向顶严格增加的。每次读到一行新的逻辑行,先比较它的缩进量和栈顶纪录的缩进量大小,大则表示进入下一层,此时把新的值压入栈并产生一个INDENT记号,小则表示此缩进量和前面某处一样(否则错误,这一点很严格),这时把栈中比它大的量都弹出,产生一个DEDENT记号。如此可以获知每一行所在的层次,并逐行解释执行。

二、 数据类型

脚本语言特点之一就是数据类型灵活,变量无需先声明,类型是靠值来动态确定的。一个变量在一个程序中可以存储不同类型的值。

Perl支持的内置数据类型有数值(包括整数和浮点)、字符串(包括单个字符)、引用、列表和数组、关联数组(字典),其中前3类属标量,在变量名前面由”$”标示,列表和数组变量名由”@”标示,关联数组名由”%”标示。即变量类型分三类,标量($varname),列表(@varname),关联数组(%varname)。之所以采取这样的标示,很可能是和perl要支持引用相关,因为,要高效支持引用,就得很方便的知道引用的类型。内置数据类型有内置方法支持,如数值的+-*/,字符串的连接、比较和匹配(详见下文的正则表达式讨论),列表的排序和翻转。当然

相关文档
最新文档