![]() |
|
Perl 最初的设计者为拉里·沃尔(Larry Wall),它于1987年12月18日发表。Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。
Perl 一般被称为“实用报表提取语言”(PracticalExtraction andReportLanguage),虽然有时被称做“病态折中垃圾列表器”(PathologicallyEclectic Rubbish Lister)。它是术语,而不仅仅是简写,Perl的创造者,LarryWall提出第一个,但很快又扩展到第二个。那就是为什么“Perl”没有所有字母都大写。没必要争论那一个正确,Larry 两个都认可。
你也可能看到“perl”,所有的字母都是小写的。一般,“Perl”,有大写的 P,是指语言本身,而“perl”,小写的 p,是指程序运行的解释器。
Perl的正式网站是 www.perl.org。
Perl的解释程序是开放源码的免费软件,使用Perl不必担心费用。Perl能在绝大多数操作系统运行,可以方便地向不同操作系统迁移。
Perl 是一种能完成任务的语言。从一开始,Perl 就设计成可以把简单工作简单化,同时又不失去处理困难问题能力的语言。它可以很容易操作数字,文本,文件和目录,计算机和网络,特别是程序的语言。这种语言应该很容易运行外部的程序并且扫描这些程序的输出获取感兴趣的东西。而且它还应该很容易能把这些你感兴趣的东西交给其它程序做特殊的处理。当然,这种语言还应该很容易在任何现代的操作系统上可以移植地编译和运行。
Perl追求的是简单, 解决一个一般的问题用它几行代码就完成了. 一个稍复杂一点的问题代码也不会超过一屏! 事实上, 大多数人用Perl写的程序大多都没超过100行.
Perl 最初是当做一种 Unix 的胶水语言设计的,但是她早就移植到大多数其它操作系统里了。因为 Perl 几乎可以在任何地方运行,所以 Perl 可以说是当今最具有移植性的编程环境。要想写可移植的 C/C++ 程序,你得在程序里加上一大堆 #ifdef 标签来区分不同的系统。要想写可移植的 Java 程序,你必须理解每种新的 Java 实现的特质。要想写可移植的 shell,你可能要记住每条命令在每种操作系统上的语法,走运的时候你可能可以找到一些公共的东西。而要想写可移植的 Visual Basic 程序,那么你只需要对“移植”有个更灵活的定义就可以了。
我们很高兴的是 Perl 避免了所有这些问题,同时还保留了这些语言中的许多优点,同时还有一些自己的特色。Perl 的特色来自许多方面:它的特性集的工具,Perl 社区的创造性,以及开源运动的大环境。不过,许多这些特性都是混合的东西;Perl 的身世复杂,它总是把事物看成是优点的不同方面,而不是弱点。Perl 是“背黑锅我来”的语言。如果你觉得自己陷入一团乱麻之中,非常渴望自由,那么请使用 Perl。
Perl 是跨文化的。Perl 的爆炸性增长很大程度上是因为那些前 Unix 系统程序员的渴望,他们希望从他们的“老家”带着尽可能多的东西。对于他们而言,Perl 是可移植的 Unix 文化蒸馏器,是"此路不通"的沙漠中的绿洲。从另外一个角度来看,Perl 还可以从另外一个方向运转:在 Windows 上工作的 web 设计者通常会非常开心地发现他们的 Perl 程序可以不加修改地在 Unix 服务器上跑。
尽管 Perl 在系统程序员和 web 设计师中间非常流行,但这只是因为是他们最早发现 Perl 的,Perl 可以用于更广泛的用途。从 Perl 最早的文本处理语言开始,它已经发展成为一种非常复杂的,通用的编程语言,以及完整的开发环境,包括调试器,调节器,交叉引用,编译器,库,语法提示编辑器,以及所有其它“真正”的编程语言所具有的所有挂勾,只要你需要。当然这些东西都是让我们可能处理难的问题的东西,而且很多其它语言也可以做到这一点。Perl 之所以成为 Perl 是因为它从来不会因为保持简单事情简单化而丢失其他方面的特性。
因为 Perl 既强大又好用,所以它被广泛地用于日常生活的方方面面,从宇航工程到分子生物学,从数学到语言学,从图形处理到文档处理,从数据库操作到网络管理。很多人用 Perl 进行快速处理那些很难分析或转换的大批量数据,不管你是处理 DNA 序列,网页,还是猪肚皮的未来都无所谓。实际上,在 Perl 社区有一个笑话就是,下次股市大崩盘就很有可能是呢个家伙写的脚本里头有臭虫造成的。(不过,乐观点来看就是,任何还在失业的股票分析师仍然有可以利用的技巧。)
Perl 的成功有许多原因。Perl 早在开源软件的名字出现之前就已经是一个成功的开源项目了。Perl 是自由的,并将永远自由下去。你可以在任何合适的场合使用 Perl,只需要遵守一个非常自由的版权就可以了。如果你在从事商业活动并且还想使用 Perl,那么用就是了。你可以把 Perl 嵌入到你写的商业软件中而不需要支付任何费用也没有任何限制。如果你碰上一个 Perl 社区解决不了的问题,那你也还有最后的一招:源程序本身。 Perl 社区不会在“升级”的伪装下租给你它们的商业秘密。而且 Perl 社区也不会“停业 ”,更不会让你孤立无援。
Perl 是自由软件这一点无疑对它是有帮助的。但这一条并不足以解释 Perl 现象,因为许多自由软件包没有能繁荣起来。Perl 不仅自由;而且好玩。人们觉得自己在 Perl 里可以有创造力,因为它们有表达的自由:他们可以选择是为计算机速度优化还是为程序员的速度优化,是冗长还是简洁,是选择可读性还是可维护性,或者选择复用性,移植性,接受性和传授性等等。假如你进入一次模糊的 Perl 比赛,甚至你还可以为模糊性做优化。
Perl 可以给予你所有这些自由,因为它是一门有着分裂人格的语言。Perl 同时是很简单并且很富有的语言。Perl 从其它地方拿来好主意,然后把它们安装到易用的框架里面。对于只是喜欢她的人来说,Perl 是实用抽取和报表语言(Practical Extractoin and Report Language)。对那些热爱她的人而言,她是变态电子垃圾制造者(Pathologically Electric Rubbish Lister)。在少数人眼里,Perl 是毫无意义的重复练习。不过世界需要一点点冗余。精简主义者总是想把事物分隔开。而我们则总是企图把它们合并到一起。
Perl 之所以是简单的语言是有很多原因的。比如你用不着知道什么特殊的指令就可以编译 Perl 程序--只要把它当做批处理或者 shell 脚本执行就可以了。Perl 的类型和结构很容易使用和理解。Perl 对你的数据没有任何限制--你的字串和数组可以要多长就多长(只要你有足够的内存),而且它们都会自动增长。Perl 不会强迫你学习新的语法和语意,Perl 改从许多其它你已经熟悉的语言里(比如 C, awk, BASIC 和 Python, 英文,希腊语等)借来语法。实际上,任何程序员都可以从书写良好的 Perl 代码段中读懂它的含义。
最重要的是,你不用先学习所有 Perl 的东西就可以开始写有用的程序。你可以写很小的 Perl 程序。你也可以象小孩那样写 Perl 程序,我们保证不会笑话你。或者更准确地说是,我们绝不会笑话小孩做事情的创造性。Perl 里的许多观点都是从自然语言中借来的,其中一条最好的观点就是只要你能把自己的意思表述清楚,那么你就可以使用这些语言的一个子集。Perl 文化可以接受任何熟练程度的成员。我们不会在你背后放个语言警察。如果你的老板不炒你,而且你的 Perl 脚本也能完成工作,那么它就是“正确”的。
尽管 Perl 很简单,但它仍然是一种特性很丰富的语言,如果你想用那些特性的话,那你就要学习一些东西。这也是把难题变简单的学费。虽然你要想把所有 Perl 能做的事情吸收还需要一些时间,但到你需要这些功能的时候你就会非常开心地发现 Perl 已经可以做这些事情了。
由于 Perl 的继承性,就算它只是用做数据归纳语言的时候也有丰富的特性,Perl 一开始就设计成可以浏览文件,扫描大量文本并且生成动态数据以及打印出这些数据的良好格式化的报表。不过,随后 Perl 就开始风行,于是它就成了可以操作文件系统,进程管理,数据库管理,进行 C/S 编程和安全编程,web 信息管理,甚至可以进行面向对象和面向功能的编程的语言。而且这些功能并非只是在 Perl 这边,每种新功能都和其它东西交流得很好,别忘了 Perl 从一开始就是设计成胶水语言的。
而且 Perl 并不仅仅只能黏合它自己的特性。Perl 是设计成可以用模块扩展的语言。你可以用 Perl 快速设计,编写,调试和部署 Perl 应用,并且你还可以在需要的时候很方便地扩展这些应用。你可以在其它语言里嵌入 Perl,而且你也可以在 Perl 里嵌入其它语言。通过模块输入机制,你可以把这些外部的扩展当做内置于 Perl 的特性。那些面向对象的外部库在 Perl 内部仍然保持面向对象的特征。
Perl 还在许多其它方面协助你。和严格的每次执行一条命令的命令文件和 shell 脚本不同的是,Perl 先把你的程序快速编译成一种内部格式。和其它任何编译器一样,这个时候还进行各种优化,同时把碰到的任何问题反馈给你。一旦 Perl 的编译器前端对你的程序表示满意了,它就把这些中间代码交给解释器执行(或者是给其它的能生成 C 或者字节码的模块后端)。听起来挺复杂,不过 Perl 的编译器和解释器干这些活效率相当高,我们的编译-运行-修改的过程几乎都是以秒计。再加上 Perl 的许多其他开发特性,这种快速的角色转换很适合做快速原型设计。然后随着你的程序的成熟,你可以逐步拧紧身上的螺母,减少散漫增强记律。如果你做得好,Perl 也能帮你这个忙。
Perl 还可以帮你写更安全的程序。除了其它语言提供的典型的安全接口之外,Perl 还通过一种跟踪数据的机制给你提供预防意外安全错误的保护,这样就可以在灾害发生之前预防其发生。最后,Perl 还可以让你设置一个特殊的防护隔段运行那些来源不明的 Perl 代码,以此来杜绝危险操作。
不过,偏执一点儿说,Perl 帮你的大部分内容和 Perl 本身没有什么关系,而是和使用 Perl 的人有关。坦率地说,Perl 社区的人们可以说是地球上最热心的人了。如果 Perl 运动里面有那么一点点宗教色彩的话,那么这就是它的核心了。Larry 希望 Perl 社区像一小片天堂那样运转,目前看来他的愿望基本上是实现了。我们也请你为此做出自己的努力。
Perl之所以强大, 是因为有CPAN, CPAN上面有无数的开源模块, 从科学计算到桌面应用到网络等等各个方面都有大量的模块! 并且现在世界上也还有无数的人在向上面添加模块! 如果你想要用PERL实现某功能, 不用自己做, 在CPAN上面搜一搜, 多半都会得到已有的结果! CPAN("the Comprehensive Perl Archive Network"全面的 Perl 存档网络)是查找任何 Perl 有关的东西的中心仓库。它包含从整个 Perl 社区收集来的智慧:成百上千的 Perl 模块和脚本,相当于好几本书的文档,以及整个 Perl 发布。如果有东西是用 Perl 写的,而且这个东西很有用而且是自由的,那么它很有可能就在 CPAN 上。CPAN 在全世界都有镜象,你可以在位于 http://www.perl.com/CPAN 的 CPAN 路牌上找到离你最近的镜象。那块路牌会记住你选择的是哪个镜象并且你以后再访问 http://www.perl.com/CPAN/(注意最后的斜杠)的时候就会自动重新定向到那个镜象。另外,你也可以从 www.cpan.org开始。这个站的界面不同,但是数据是一样的。
为了理解 Perl 为什么用现在这样的样子定义(或者为什么不定义成其他的样子),我们必须首先明白为什么会有 Perl。所以,让我们先挖掘一下步满尘灰的历史书....
退回到 1986 年,Larry 是一个系统程序员,在做一个多层安全的广域网项目的开发。他负责这么一个系统,这个系统由西海岸的三台 VAX 和三台 sun 机器,通过一条加密了的 1200 波特的串行线路和东海岸类似配置的系统连接组成的,因为 Larry 的主要工作是支持(他不是该项目的程序员,只是系统专家),所以他就有机会利用他的三种优点(懒惰,不耐心,和狂傲)来开发和提高所有有用的工具——比如 rn,patch,和 warp。(注:正是在这个时候,Larry 被划入了“计算机动物”的范畴,这是以那些人的不可遏止的“再加一个特性”的渴望为基础评判的,因为这种行为几乎成了生物必须。毕竟,如果生活就是太复杂的话,难道程序就不会吗?尤其是想 rn 这样的程序,它真是应该当作一个高级的人工智能项目来看待,因为他们就可以为你阅读新闻。当然,有些人已经在说 patch 程序太复杂了。)
一天,Larry 刚刚把 rn 撕成碎片,把它一片一片地放在他的目录里,大管理员就跑进来说, “Larry,我们需要一个管理配置,用它控制所有六台 VAX 和六台 sun。我们想在一个月里就要它。你做一个吧!”
所以,从不逃避工作的 Larry,开始问自己做一个两个海岸的 CM 系统的最好的方法是什么,它必须不用自己从头开始写,并且还可以查阅两个海岸的问题报告以及核准和控制。他想到的答案只有一个词:B-news。(注:也就是 Usenet 传输软件的第二种实现。)
Larry 着手在这些机器上安装了新闻软件并且增加了两条控制命令:一条“append”命令用于向现有的文章追加内容,和一条“synchronize”命令保持两个海岸的文章数目相同。CM 可以用 RCS (版本控制系统)做,而核准和控制可以用新闻和 rn 来做。到目前挺好。
然后大管理员让他生成报告。新闻是在核心机器里的一个独立的文件里维护的,里面有许多文件间的交叉引用。Larry 的第一个反应是“用 awk。”糟糕的是,那个时候的 awk 无法做到以文件里的信息为基础打开和关闭多个文件。Larry 不想编写一个特殊目的的工具。结果就是产生了一种新的语言。
最初这种新的语言并不叫 Perl。Larry 和他的同事及亲友(Dan Faigin,写这段历史的人,和 Mark Biggar,他的妻弟,在初始设计阶段帮了大忙)交换了一大堆名字。实际上 Larry 考虑并抛弃了字典里的所有三个或四个字母的单词。最早的名字是“Gloria”,以他的宝贝(和老婆)命名。但他很快就发现这样会产生太多家庭混乱。
然后名字就成了“Pearl”,最后它变成了我们现在的“Perl”,部分原因是 Larry 看到另外一种叫 PEARL 的语言的介绍,但最主要的原因是他懒得总要敲五个键。当然,这样 Perl 就可以用做一个四字母的词。(不过,你会注意到,这里有以前首字缩写的残余: “Practical Extraction And Report Language”。)
最早的 Perl 没有今天的 Perl 那么多的特性。那时候有模式匹配和文件句柄,有标量,有格式化,但是很少有函数,没有相关的数组,而且只有一个实现得不怎么样的正则表达式,(从 rn 借来的)。手册页也只有 15 页。但是 Perl 比 sed 和 awk 快,并且开始在该项目的其他应用里使用。
但是其他地方又开始需要 Larry 了。有一天另外一个大经理来了并且说:“Larry,给 R&D 做支持。”并且 Larry 说,好吧。他带上 Perl 并且很快发现它逐渐成为系统管理的好工具。他借来 Henry Spencer 漂亮的正则表达式软件包并且把它变成更有男人味(不过 Henry 可能不会愿意在正餐的时候考虑这些特性。)然后 Larry 增加了大部分他想要的特性,以及一些别人想要的特性。然后它就把 Perl 发布到网络上。(注:更让人吃惊的是,他先后工作于喷气推进实验室(JPL),然后是 NetLabs? 和 Seagate 之后,仍然不断发布新 Perl。现在,其他人做了大部分工作,而 Larry 假装为 O'Reilly & Associates(一个小公司,印刷关于计算机和相关事物的小册子。)其余的就是历史了。(注:而这些东西,是历史的一个注解。当开始 Perl 的工作的时候,Larry 已经把 rn 分解成碎片,并且准备做一次全面的重写。但因为他开始在 Perl 上干活,所以 Larry 没有再碰 rn。它仍然是碎片。有时候 Larry 说要用 Perl 重写 rn,但是从来没当真。)
然后事情的发展就是这样的:Perl 1.0 在 1987 年十二月十八日发布;有些人仍然很认真地对待 Perl 的生日。Perl 2.0 在 1988 年六月发布,并且 Randal Schwartz 开始了“另外一个 Perl 黑客”的签名的传奇。在 1989 年,Tom Christiansen 在巴尔的摩 Usenix 拿出了第一个公开的 Perl 教程。1989 年十月的 Perl 3.0开始,这门语言第一次以 GNU 公众版权(GPL)发布和分发。
1990 年三月,Larry 写了第一首 Perl 小诗(见下一节)。然后他和 Randal 写了本书的第一版,The Pink Camel;该书在 1991 年早期发行。然后 Perl 4.0 就立即发布了;除 GPL 之外,它还包括了 Artistic License(艺术版权)。
万众期待的 Perl 5 在 1994 年十月发布。这是一个完全重写的 Perl 版本,它包括对象和模块。 Perl 5 的到来甚至连 The Ecomomist 杂志都提到。到了 1995 年,正式向 Perl 社区引入 CPAN。在 1996 年,Jon Orwant 开始出版 The Perl Journal 杂志。在长时间的猜测之后,本书的第二版,The Blue Camel,在那年的年末出版。第一次 O'Reilly Perl 大会(TPC) 1997 年夏季在加州 San Jose 举行。现在,重大时间几乎是每天都在发生,所以,关于历史的其他部分,请检查 CPAST (Comprehensive Perl Arcana Society Tapestry (history.perl.org))上的 Perl 纪年表。
在助手框里的诗歌的仿制品是在1990年的四月一日愚人节张贴到 Usenet 上的。我们不加注释的把它放在这里,只是想表示典型的编程语言的隐喻真的是多么让人作呕。对所有有文学价值的东西大概都是这样的吧。Larry 在最初为 Perl 3 写的那些“Black Perl”到了 Perl 5 不能分析通过之后,真是感觉轻松许多。
不过,Larry 自己的文集很幸运地被 Perl 诗歌的王后,Sharon Hopkins 的光芒所掩盖。她写了相当多的 Perl 诗歌,以及一些她在 1992 年 Usenet 冬季技术大会上拿出来的关于 Perl 诗歌的文章,标题是“Camels and Needles: Computer Poetry Meets the Perl Programming Language”。(这篇文章可以在 CAPN 的 misc/poetry.ps 找到。)除了是最多产的 Perl 诗人之外,Sharon 还是下面这首诗歌的作者,这首诗是发表得最广泛的一首,并且曾经在 Economist 和 Guardian 杂志上刊登:
#!/usr/bin/perl APPEAL: listen (please, please); open yourself, wide; join (you, me), connect (us,together), tell me. do something if distressed; @dawn, dance; @evening, sing; read (books,$poems,stories) until peaceful; study if able; write me if-you-please; sort your feelings, reset goals, seek (friends, family, anyone); do*not*die (like this) if sin abounds; keys (hidden), xXyz (locks, doors), tell secrets; do not, I-beg-you, close them, yet. accept (yourself, changes), bind (grief, despair); require truth, goodness if-you-will, each moment; select (always), length(of-days) # listen (a perl poem) # Sharon Hopkins # rev. June 19, 1995 Perl Poetry Article 970 of comp.lang.perl: Path: jpl-devvax!pl-dexxav!lwall From: lwall@jpl-dexxav.JPL.NASA.GOV(Larry Wall) Newsgroups: news.groups,rec.arts.poems,comp.lang.perl Subject: CALL FOR DISCUSSION: comp.lang.perl.poems Message-ID: <0401@jpl-devvax.JPL.NASA.GOV> Date: 1 Apr 90 00:00:00 GMT Reply-To: lwall@jpl-devvax.JPL.NSAS.GOV(Larry Wall) Organization: Jet Prepulsion Laboratory, Pasadena, CA Lines: 61 It has come to my attention that there is a crying need for a place for people to express both their emotional and technical natures simultaneously. Several people have sent me some items which don't fit into any newsgroup. Perhaps it's because I recently posted to both comp.lang.perl and to rec.arts.poems, but people seem to be writing poems in Perl, and they're asking me where they should post them. Here is a sampling: From a graduate student (in finals week), the following haiku: study, write, study, do review (each word) if time. close book. sleep? what's that? And someone writing from Fort Lauderdale writes: sleep, close together, sort of sin each spring & wait; 50% die A person who wishes to remain anonymous wrote the following example of "Black Perl". (The Pearl poet would have been shocked, no doubt.) BEFOREHAND: close door, each window & exit; wait until time. open spellbook, study, read (scan, select, tell us); write it, print the hex while each watches, reverse its length, write again; kill spiders, pop them, chop, split, kill them. unlink arms, shift, wait & listen (listening, wait), sort the flock (then, warn the "goats" & kill the "sheep"); kill them, dump qualms, shift moralities, values aside, each one; die sheep! die to reverse the system you accept (reject, respect); next step, kill the next sacrifice, each sacrifice, wait, redo ritual until "all the spirits are pleased"; do it ("as they say"). do it(*everyone***must***participate***in***forbidden**s*e*x*). return last victim; package body; exit crypt (time, times & "half a time") & close it, select (quickly) & warn your next victim; AFTERWORDS: tell nobody. wait, wait until time; wait until next year, next decade; sleep, sleep, die yourself, die at last I tried that, and it actually parses in Perl. It doesn't appear to do anything useful, however. I think I'm glad, actually... I hereby propose the creation of comp.lang.perl.poems as a place for such items, so we don't clutter the perl or poems newsgroups with things that may be of interest to neither. Or, alternately, we should create rec.arts.poems.perl for items such as those above which merely parse, and don't do anything useful. (There is precedent in rec.arts.poems, after all.) Then also create comp.lang.perl.poems for poems that actually do something, such as this haiku of my own: print STDOUT q Just another Perl hacker, unless $spring Larry Wall lwall@jpl-devvax.jpl.nasa.gov
看看Perl的创造者,看看Perl的新进展. 我和Perl脚本语言的创造者,Larry Wall(拉里沃尔,),在3月1号通过 电子邮件进行了一次"交谈".Larry显得非常健谈,你一定会觉得这次 交谈既有趣又使人受益.我是这样感觉的. Marjorie(马乔里,记者,以下简称马): 开始的时候,是什么让你决定开发Perl的? Larry(拉里,Perl的创造者,以下简称拉): 这要看你的"开始的时候" 是指什么样的"开始". 就象摩西所说:"开始时,上帝创造了 天空和大地." 我并不是完全在说笑.每个人都有他在意(或 不在意)的对圣经的阐释方法,而我认为宇宙万物就是激发 我们想要成为一个创造者的最大的灵感.我也已经努力地要 把这样一种整体的思想加入到Perl中间去,有些已经获得了 实现. 要是以传记体的开始来讲,我的父亲是牧师,我的爷爷也是牧 师,我的很多祖先也是牧师.我的妻子总是喜欢说传教士是智 慧的种子(我猜她是在奉承我).不过也有可能吧,我确实继承 了还算像样的脑组织结构的基因.另外我还继承了一些思想 和技能,有些思想和技能已经融入到Perl文化当中了.比如,认 为你能改变世界的思想;比如,认为别人很重要的思想;比如, 对于交流的热爱,包括花言巧语的理解,更别说对语言学的关 注了.再比如,对于文字重要性的认识;对于将所有事物与其他 事物进行联系的渴望;对于建设的狂热,对于毁坏的厌恶.当然 还有一点,那就是真正衡量财富的方法不是看你积聚了多少,而 是看你与别人分享了多少. 最直接的诱因是我遇到了一个问题,我手头的工具都无法解决它. 或者说,都不能轻易得解决它.就象使徒保罗所说"任何事都是有 可能的,但并不全都是有利的."我应该能够用awk和shell解决我 的问题,但幸运的是程序员最重要的三个美德在我身上储量丰富, 它们是:懒惰,急躁和傲慢.我太懒了,如果用awk来做的话需要做 大量的工作,这是无法忍受的.我太急躁了,awk做起来很慢,我可 等不及.然后,我的傲慢使我认为自己可以做的更好一些. 当然,真正要写出Perl这样的东西需要做大量艰苦的工作,也需要 耐心甚至谦卑.如果我仅仅是为了我自己,可能是不会下这么大的 功夫的.然而,我知道,其他的人也会来使用Perl,不仅仅只有我一 个人而已,所以我的"懒惰曲线"是结合整个社区来绘制的.这样看来 我的懒惰就是代理性质的懒惰咯.呵呵. 马: 哦,回答的非常全面.必须承认,我本来没有期望你能从宇宙的起源说起:-) 那么,为什么用Perl这个名字呢? 拉: 我希望起一个短一点的有正面意义的名字.(比如,我绝对不会把一个语言 叫作"Scheme"或是"Python").实际上我查阅了字典中所有三个或是 四个字母的单词,最后却一个也没有用.我也曾想过用我妻子的名字 ,Gloria,来命名它,但与家庭态度相左.最后我选中了"Pearl",作为 Practical Extraction and Report Language(实用摘录和报告语言) 的缩写.那时,字母"a"还在名字当中.但是我听到有传闻说有个朦胧 绘画语言也叫作"pearl",就把它缩短为"Perl"了.(当我给这个语言新 的诠释的时候,名称中的"a"也就真的消失了,可以把"Perl"理解为: Pathologically Eclectic Rubbish Lister病态折衷垃圾列表器 (译者:晕,怪不得这种解释不常见到,太抽象了点:-!)). 另一个关于"Perl"这个名称的珍闻是,刚开始时"Perl"中间的"p"是小写 的.那时UNIX还只能支持小写字母.实际上,你可以把它叫作反小写系统. 就象在网上发贴的人最初所有的东西都是小写的,后来它们发现适当的 使用大写可以使得交流更加的方便.对Perl来说,当Perl4发布之时我们觉得 有必要区分"perl"程序和"Perl"语言.如果你找出第一版骆驼书,你可以 看到标题是Programming perl,p是小写的.而现在,标题是Programming Perl. 马: 嗯,Perl现在完美了吗,你还会进一步的开发它吗? 拉: 嗯,这两者并不是互斥的. 看看Linux. :-) 实际上,Perl从来没有设计的很完美.设计的时候我们就打算使它适合进 一步的发展,具有更强的适应性.从生物学角度来讲,世界上没有完美的 生命体.最多你只能说一个生命体对其所处的环境适应的好些或是差些. 实际上,生物学家已经认识到任何对于一个环境来说似乎是"完美"的生命体 当环境发生变化的时候就有灭绝的危险.超特定性几乎与生态龛位同义. 我们说的并不只是恐龙,还有快速蜗牛和印度豹,还有巴西的一种甲虫-- 当然还有Visual Basic. 我们已经看到很多超特定性有机体的死亡了,在计算机世界中,这包括: Lisp机器,Ada芯片和很多所谓的第四代语言.任何用汇编语言为废弃的 系统编制的程序如今也都被废弃了.同样的,任何把自己的命运与单一 操作系统捆绑在一起的程序也会随着操作系统的消亡而消亡.我不知道 Windows在沉没之前还能够经受几颗鱼雷的轰击,但是当它沉没的时候, 一大批仅适用于这个操作系统的程序将随其一起沉没.明显的,由于开放源码 运动,Linux不存在这样的问题. 不管怎么说,让我们回到Perl上来.从一开始,Perl就是为改变而设计的. 这中间包括了某些折衷.如果以和我不同的观点来看的话,这些折衷可能 并不是最好的处理方法.比如,为了在将来给Perl增加关键词的时候不会 破坏已有的老程序,我在变量名上给它们使用了不同的命名空间.即变量 名和关键字必须是要用标记明显区分开的.我选择了标记变量,一个是因为 这样可以方便的使用变量在字符串中的内插,另一个原因是在BASIC语言 中有标记变量的先例.在某些环境下这可能是无法接受的,比如某些顽固 的纯化论者会说,加入标记会使Perl变得很难看,而且太象BASIC.或许吧. 那又怎么样?这是一种有意的折衷,目的是为了Perl可以更为有用.从这方面 来讲,Perl可能不是很符合计算机科学家的定位,但是它适合这个世界. 对于这个折衷,我从来没有觉得遗憾. 当然,第一印象之后,还是有些东西会得到计算机科学家的喜欢的,比如变量 的作用域和closures.因此大体上,如果这些科学家能够强捏住他们的鼻子 把Perl奶酪放到他们的嘴里尝一尝的话,那么他们会发现还是可以一吃的. 更重要的,Perl5使用了一种扩展系统,它有些类似Linux的模块系统,允许 连续的开发,而不需要改变核心语言.即,你可以开发特定功能的Perl模块 如果这个模块非常流行,常用的话,我们会考虑把它加入到Perl核心中去. 这并不是说我们不会改变核心了.最近我们还加入了对多线程和Unicode的支持. 有趣的是,虽然我们确实是在修改核心,我们还是使得它看起来就象是在做一 个扩展模块.实际上,如果你要使用新的核心的特性,那你必须要首先声明. 这正是我们使得Perl几乎可以100%兼容老版本Perl脚本的秘诀.大多数Perl1 的脚本可以不用更改的运行于Perl5之下.一个附带的好处是,对于特性的声明 使得依赖性在编译时是可见的,所以程序不会在运行时因为缺少某个特性而退出. 这与shell编程形成了鲜明的对比,在那里,直到执行的时候这些问题才会暴露 出来. 马: 有没有进一步的Perl开发计划? 拉: 我要是比自己再聪明一些,大概就能预见到了.不过我的智慧只能是知道我还没有 聪明 到那样的程度,正因为如此我把可扩展性放到了Perl的首要位置. 说到这个,我可以告诉你一些我希望实现的特性. 首先,如果要来处理文本,Perl是首选.Perl一直就是一个文本处理语言,虽然很早 以前它就已经不仅仅局限于文本处理了.由于这个缘故,Perl就成为CGI编程的首选, 因为在提取和组合文本方面Perl非常拿手. 其次,我希望Perl可以把这样那样的东西黏结到一起.我们并不是黏结积木,我们 的目的是把原来并不同类的东西黏结到一起.作为一个胶水语言,Perl既适合于 修补裂缝,也适合于填充壕沟.Perl对空隙极为熟悉.典型的CGI脚本或是mod_perl servlet可以把数据库和网络黏结到一起.当一个空隙消失之后,又会产生其它空隙. 第三,我希望可以给失去特权的人以特权.我们开玩笑说准备把多出来的饭菜送给 饥饿的非洲人,实际上,在美国之外,有非常多的程序员,他们没有足够的钱用来 购买操作系统或是软件.中国最近一次就从某出版社(我为其工作)订购了200,000 本英特网书籍.这仅仅只是开始而已.也正因为如此去年我把对Unicode的支持加入 到Perl中去.当然,文本处理也涉及到Unicode. 说了这么多,其实它们基本上和下一步的开发计划无关,因为这些天以来我基本上 已经很少参与开发了.Perl社区的工作已经超过我很多数量级了,他们才是真正的 使Perl成为真正的脚本语言的人.我只是待在一边偶尔为他们欢呼罢了.我现在就 要为他们欢呼.啦啦啦! :-) 马: Perl到底是在哪些方面优于其它的脚本语言的,比如Python和Eiffel? 拉: 对于脚本语言来讲,Perl是独特的,而且在所有的计算机语言中,Perl也是非常独 特的.它 是唯一的一个有意识的并且明确的被设计为后现代化的计算机语言.而其它的语言 都还不同程度的坚持着他们的现代化特性.事情虽然是这样,我却很少使用后现代化 来描述Perl,因为很多人并不能真正理解后现代主义,虽然他们已经处于后现代化 之中.事实是,美国文化已经完全进入后现代化了,不仅是音乐和文学,还包括时尚, 建筑以及所有的与文化沾边的领域. 现代化是基于某种傲慢之上的,把创意置于一切之上的文化的有色眼镜,它的设计者 认为他们认为很好的东西,全世界都应该喜欢.即是说,如果某件事值得做,那就应该 把所有其它可能的途径都推到一边而仅留它一个.看看在Lisp中对圆括号的使用,以及 Python中对空格的使用吧.还有对对象的强制使用,这包括很多语言,其中就有Java. 所有这些都是"为了用户考虑"而限制了用户的自由.它们其实就是阻碍自由思想的 翻版.1970年代的时尚警察已经离我们远去了,但是很多程序员依然是网络警察的奴隶 . 恰恰相反,后现代主义允许人们对任何艺术品从个人的或是不同文化的背景给出诠释 . 无论怎么说都是你自己的事情.Perl的口号即来源于此,那就是:"条条大路通罗马".Perl 之所以在你做任何事时都给你许多不同的可以使用的方法的原因是:我确信程序员们 都希望 自己是具有创造性的,他们可以有很多不同的理由想要写出他们自己的特别的代码. 你想要做什么是你自己的事情,不是我应该考虑的.我要做的就是给你油漆--而你绘制 你的图画. 马: 谁在使用Perl,他们怎么使用它? 拉: 两年前,我在一次商业展会中遇到一个人.他和另一个人在经过我面前的时候,他 正给那人介绍 国家安全局的有关情况,他说他用Perl写了一个过滤器.我于是问他,我可不可以告诉 别人 国家安全局使用Perl.他当时的回答是:"难道有谁不用吗?"所以现在我不会说国安局 用Perl. 我只是告诉大家国安局的人认为大家都在用Perl.我想大家应该知道这个. 有趣的是,正是这个人中止了那个使用到perl的项目.当我告诉他,Perl可能是那个项 目最大 的受益者时,他觉得很开心. 说到大家用Perl做什么,可以说是做什么的都有.几年前当我听说Perl在华尔街使用非 常广泛的 时候,着实吃了一惊.当时他们说:"每个桌子上都有一本Perl书".不过,考虑到市场分 析需要 他们不断的修正他们的模型,他们还需要扫描那些可能与他们在市场中的位置相关的 新闻信息 的话,就会觉得合情合理了.他们需要的正是快速原型和文本处理. 很多人把Perl和CGI脚本联系在一起,其实那主要是由Apache下的mod_perl servlets 完成的. Perl多是用于那些客户端的机器人和蜘蛛,它们搜索网络并在形形色色的数据库中建 立链接. 不过,这并不是全部.如果你曾经受到垃圾邮件的困扰(有谁没有过?),那么几乎可以肯 定,你的 邮件地址被某个Perl脚本从网络上搜集到了.垃圾邮件本身也很有可能是由Perl脚本 送出的. 有人可能说Perl是滥用网络的首选.但同时也会有人以此为傲. 这仅仅是Perl用途的一鳞半爪而已.如果不考虑民意测验或调查也不考虑美国人口调 查局, 那么最好的了解Perl用途的方法就是查看Comprehensive Perl Archive Network (CPAN ) 站点上的800个或是经常使用的模块.如果你把这些模块都看一遍,你会发现,Perl几乎 与世界 上所有事物都有联系.稍微动动脑筋,你会发现Perl之所以与世界上所有的事物都有联 系, 并不是因为Perl能够与所有这些事物如何如何,而是因为Perl可以把世界上的所有事 物联系在 一起. 组合学是令人惊讶的.Perl杂志的第一期(不要与Linux杂志混淆)有一篇文章, 标题是 "Perl是如何拯救了人类基因组计划".文中说明了世界各地不同的基因组实验室使用 了不同的 数据库,其中的数据格式也是千差万别,而Perl如何将这些数据处理成统一的数据. 马: 我们收到ActiveState Tool公司的一份产品声明,它说: ``PerlDirect 提供对Perl的如下特性的可靠的,稳定的,支持和责任: Perl的 可用的高质量的分发包,以及常用扩展;建议和支持;Y2K测试组件; 每周一次的Perl警告信息. PerlDirect提供给您直接支持一个引导开源运动 的组织的机会.年捐助额应当不低于12,000美元.'' 你和这家公司熟吗?我觉得他们提供的这个机会非常有趣.这有什么意义吗? 拉: 听起来好像是和我签约的支持.我相信即使是Richard Stallman也会承 认技术支持是通过自由软件盈利的有效方式. 我和ActiveState没有直接的联系,不过我跟他们合作过,我想他们解决的问题 远比他们引起的问题要多得多.你得了解,他们的市场是Windows,在那里他们 收取报酬帮用户做事是很好的事情,因为那是唯一不会使用户们疑惑的方式. Linux用户当然要聪明一些,不过他们还是不够聪明,没有认识到Windows完全 是一种不同的文化,而Perl作为一种后现代化语言对环境是非常敏感的,因此 在那样一种环境下看起来会大不相同. 马: 噢,我的本意并不是说他们不诚实--只是好奇想知道你到底知不知道这件事. 你对开放源代码运动的看法怎样?你认为它将会变成长期存在,还是只是一时流行? 拉: 我的大脑一定是连接性很强的,因为我认为你所说的两方面都是正确的.而且 它们同时也都是不对的. ;-) 到目前为止,开源运动已经经历了20年的发展了,我们怎么能说它将变成什么什么? 我们仅仅要向大家显示开源也曾经产生了大量优秀的代码程序.另一方面,我们想 更进一步,希望更多的人认识到这是一种有效的开发模式,对很多不同种类的,以前 都是以封闭模式开发的软件也是适用的. 不过,当然,它也是一时流行--就象我们已有的其它一时流行的东西一样,比如 自由语法,结构化程序设计以及最近的面向对象. 你得了解的是,对一时流行的东西,人们通常会有两种对待的方法.这有些象启示录中 把绵羊和山羊分开一样.有些一时流行的东西,流行过去之后就会从此消失,但是另外 一些一时流行的东西会由流行转为平淡,通常在这之前都会经过一个狂热期.比如 自由语法,结构化程序设计和面向对象等,它们都是由一时流行转为平淡,但是并没有 消失.那些流行之后即消失的东西,通常不是来源于历史,而是来源于某些人的希望 (通常是市场人士).以此来判断的话,开源应该会由一时流行转为普通应用,因为它 其实已经是普通应用了. 以我来看,开源运动正是我们正在成长的后现代化文化的又一个展示.相反的,所谓商 业 机密的提法只是之前的创意无价的思想的翻版.我们以前经常说代码重用服务,可是这 么多年来,只有当开源出现之后,代码重用服务才得以实现.后现代化程序员认为重用 好代码不必考虑它是原创还是相反.这与自豪无关.后现代化主义者应该是一个剽窃者 , 剽窃一切他(她)认为精彩的东西. 马: 要是什么东西都开源的话,程序员要靠什么生活呢? 拉: 和许多其他开源的支持者不同,我不认为任何东西都会开源. 我所持的是目前也在逐渐得到更多认同的观点,那就是那些具有 很大规模的基础性的东西需要开源,就象美国政府逐渐认识到州 际公路应该是不收费的一样.另一方面,我不会期望城市中的停车 场会免费,除非那个市府特别开明.因此如果拿Windows和Word来 比较,我更希望Windows能够开源. 有一种说法,我们可以有很多方法通过开源来谋生,这就好像我们 有很多方法通过开放的科学来谋生一样.不过,我认为这里正是开源 需要努力开发的一个方向.科学在开始时,只是富人的爱好,只是当 它进入到教育学院之中以后才逐渐发展成今天为我们所熟悉的形式. 开源还没有开始这一步,或者更确切的说,开始了,但是各个教育 院校却把目标设定在赚钱上了.我希望有更多的地方能向UC Berkeley 学习. 马: 那么,你靠什么谋生呢? 拉: 开始时,我和其他人一样,一边编程一边做系统管理的工作,同 时我还开发自由软件.之后,我写了一本书然后就有了版税.那本书 很畅销,它使得我和出版商O'Reilly & Associates都赚了很多钱,可能赚的 比我还多.当然,那些钱他们还要用来支付其他人的报酬,总的来说 是差不多的. 不管怎么说,三年前我和Tim O'Reilly都认识到,对Perl有利的事情dv O'Reilly & Associates也是有利的.因此现在我想干什么他们都会 为我付账,只要是对Perl有帮助就好.这是一种良好的共生关系. 马: 有没有新的令人感兴趣的计划呢? 拉: 有人建议我写作骆驼书的第三版,除此之外我还没有正式的计划. 马: 哦.介绍一下你自己吧.比如你在哪里上的学,你有什么兴趣爱好 之类的. 拉: 我的童年有一半时间是在洛杉矶南部度过的,然后是在华盛顿. 我从高中毕业之后,进入西雅图太平洋大学,开始学的是化学和音乐, 然后转到医学,最后的专业是自然和人工语言.之后,我和我妻子参 加了语言学的进修.当时,我们打算去做传教士(准确的说,是圣经 解说员),最后考虑到健康的原因放弃了该计划.有趣的是,传教士们 由Perl上得到的帮助大概会大于我作为一名传教士能够提供的帮助. 至于说到我的兴趣,这个有点困难,因为我对所有有趣的东西都感 兴趣.说起来就会有很多了,不过有两样例外,即歌剧和肥皂剧-- 太空题材的影片除外. 马: 你娱乐的时候会做什么? 拉: 读书和听我的妻子给我读书(特别是太空类的).和家里任何人讨论 任何问题.玩填字游戏.玩麻将.练合气道.看动画.逗鱼. 马: 看起来你很忙碌有很有趣味--很好的组合.那么你早饭吃什么? 拉: 我早饭吃很多东西--不过,我通常是在午餐时间吃早饭. 马: 时间过得好快.谢谢你抽空接受采访.非常感谢!