编程语言之Perl
2014-08-14 14:53:32 阿炯

Perl是高级、通用、直译式、动态的程序语言。最初设计者拉里·沃尔(Larry Wall)为了让在UNIX上进行报表处理的工作变得更方便,决定开发一个通用的脚本语言,而在1987年12月18日发表。目前,版本中包含Perl 5以及Perl 6(开发中)。


Perl借用了C、sed、awk、shell脚本以及很多其他编程语言的特性。其中最重要的特性是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。从2000年开始,目前拉里·沃尔开始开发Perl 6,来作为Perl的后继;不过Perl 6语言的语法有很多转变,所以Perl 6被视为Perl家族中的另一个语言。Perl是作为一个使用C编写的核心解释器来实现的,以及用Perl和C编写的大量模块集合(但Perl6的编译器和解释器Pugs是用Haskell编写的)。


Perl语言的应用范围很广,除CGI以外,Perl被用于图形编程、系统管理、网络编程、金融、生物以及其他领域。由于其灵活性,Perl被称为脚本语言中的瑞士军刀。其原名叫“Pearl”。拉里·沃尔想给这个语言起一个有正面意思的短的名字;他考虑了(并且否定了)字典里每一个3—4个字母的词。他也考虑用他的妻子Gloria的名字命名。沃尔在Perl官方发布之前发现了现有的PEARL语言,并且改变了这个名字。

当指代这个语言的时候,名字通常是大写的(Perl),就像专有名词一样。当指代这个直译器本身的时候,这个名字通常是小写的(perl),因为大部分类Unix文件系统都是区分大小写的。在《Programming Perl》的第一版发布之前,用perl指代这个语言也很普遍;Randal L. Schwartz排版时将这个语言的名字在书中写成大写的以便理解。后来,这个大小写的区别就成为正规的了。

Perl标志
《Programming Perl》,由OReilly[奥莱理](有的地方也称欧莱礼)媒体发布,特色是封面有一张骆驼的图片,因而被称作“骆驼书”。这张骆驼的图片已经成为了Perl非官方的标志和一个黑客的标志,这出现在T恤衫和其它衣服上。


欧莱礼拥有此图像之商标,并且宣称,唯有在捍卫“符号之完整性”时,才会行使其法律上的权力。欧莱礼允许此商标在非商业目的之前提下被使用,并同时供了Programming Republic of Perl的图像以及Powered by Perl的按钮图。Perl的另一个识别符号是羊驼。因为《Intermediate Perl》一书的封面是一只羊驼。


Perl思想
Perl语言的中心思想可以集成为一句话“TMTOWTDI”:
There's More Than One Way To Do It.(不只一种方法来做一件事。)
Perl的作者拉里·沃尔建议可以把这个缩写词念成“Tim Toady”。这句话后来被扩充成:

There's more than one way to do it, but sometimes consistency is not a bad thing either.
(不只一种方法来做一件事,但有时保持一致也不错。)
TIMTOWTDIBSCINABTE,发音为“Tim Toady Bicarbonate”。

另一个Perl程序员常常想起的Perl俗语是:
Easy things should be easy, and hard things should be possible.(简单的事情应该是简单的,复杂的事情应该变得可能。)


Perl之父,Larry Wall

优点
为了实现这样的目标,并且又因为Larry Wall本人也是一个语言学家,他设计Perl语言时使用了很多语言学的思维。相比C、Pascal这样的“高级”语言而言,Perl语言直接提供泛型变量、动态数组、Hash表等更加便捷的编程元素。Perl具有动态语言的强大灵活的特性,并且还从C/C++、Basic、Pascal等语言中分别借鉴了语法规则,从而提供了许多冗余语法。使得程序员可以忽略计算机内部数据存储、类型、处理方法、运算规则、甚至内存越界等等的细节,而将思考中心放在所需要的程序逻辑上。就这一点而言,很多Perl程序员认为目前只有Perl、Python等泛型语言才能称为“高级”语言,而C、Pascal甚至C++这些只能称为“中高级”语言而已。可以说,在统一变量类型和掩盖运算细节方面,Perl做得比Python更为出色。

由于从其他语言大量借鉴了语法,使得从其他编程语言转到Perl语言的程序员可以迅速上手写程序并完成任务,这使得Perl语言是一门容易用的语言。

缺点
也正是因为Perl的灵活性和“过度”的冗余语法,也因此获得了仅写(write-only)的“美誉”,因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。

同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。对此,《Learning Perl》一书里建议经常使用Perl编程。

建议的解决方法是在程序里使用use strict;以及use warnings;,并统一代码风格,使用库,而不是自己使用“硬编码”。Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。

Perl 6
Perl 6正在开发中,它将会与现在的Perl版本有很大不同,但相信还要开发一段长时间。 其中最主要的改变是,Perl 6会是完全面向对象的,有专用于声明类型的语法。另外也提供了不同的正则语法,新的语法称作“规则”,并且允许用户在正则中加入空格等以便阅读,也可以命名一个正则方便调用。其中的控制流程和循环的判断条件的括号是可选的。

Perl 7 还在计划中。

Perl 历史
1987年开始写作Perl,在1987年12月18日把1.0版本发布到了comp.sources.misc新闻组。这个语言在接下来的几年内很快地发展起来。

Perl 2于1988年发布,特色是有一个更好的正则表达式引擎,Perl 3,于1989年发布,添加了对二进制数据流的支持。

Perl 4的一系列维护的版本,最后一版是1993年的Perl 4.036。那时沃尔废弃了Perl 4,开始开发Perl 5。Perl 5的最初始设计持续到了1994年。《perl5-porters》邮件列表于1994年5月为了共同移植Perl 5而创建。这将主要的论坛留给了Perl 5的开发,维护,和移植。

Perl 5.000于1994年10月17日发布。这是一个几乎完全重写了的直译器,而且它给这个语言添加了很多新的特性,包括对象,引用,局部变量,和模块。很重要地,模块提供了一个不用修改直译器就可以扩展语言的方法。这使得核心的直译器非常稳定,即使它允许一般的Perl程序员添加新的语言特性。从此Perl 5的开发就活跃起来了。Perl 5历史中最重要的事件之一是支持了模块。在1995年10月26日,CPAN,一个软件仓库。

Perl 5.8最初于2002年7月18日发布,从此每年才有一次更新。Perl 5.8的最后一版是5.8.9,发布于2008年12月14日。5.8版本改进了Unicode支持,添加了一个新的IO处理机制和新的多线程处理,提高了数字精度,添加了一些新模块。

2007年12月18日,Perl 1.0的20周年纪念日,Perl 5.10.0发布了。Perl 5.10.0包括了显著的新特性,这拉近了Perl 5和6之间的距离。这些特性包括一个swtich语句(叫做“given/when”),正则表达式的更新和智能匹配操作符“~~”。

2010年4月12日,Perl 5.12.0发布了。显著的提升包括新的package NAME VERSION语法,Yada Yada操作符(有意地用占位符标记没有实现的代码),默认use strict;(在use 5.012;时)完整的Y2038编译,正则转化重载,DTrace支持,和Unicode5.2。

Perl 5.14发布于2011年5月14日。这个分支的最后一版,5.14.2,发布于2011年9月26日。

Perl 5.16发布于2012年5月20日。显著的新特性包括可以指定一个perl的版本来模拟,这允许用户更新perl的版本,但可以运行可能会不兼容的老脚本。也更新了核心部分来支持Unicode 6.1。


PerlV5.10
PerlV5.12
PerlV5.16
PerlV5.18
PerlV5.20
PerlV5.22
PerlV5.28
PerlV5.32
PerlV5.36
PerlV5.38



官方主页:http://www.perl.org/