Statistics
36
Views
0
Downloads
0
Donations
Uploader

高宏飞

Shared on 2025-12-21
Support
Share

Author5th Edition Learning Perl [Learning Perl, 5th Edition]

《Perl语言入门(第5版)》也就是大家所称道的“小骆驼书”,是Perl程序设计人员最为仰赖的启蒙读物之一。自1993年以来,这本《Perl语言入门(第5版)》就成为热卖的Perl语言教学材料,而此次新版又涵盖了Perl 5.10的最新变化。《Perl语言入门(第5版)》的诸位作者自1991年起就开始在Stonehenge Consulting从事Perl教学工作,多年的课堂教学实践和积累下来的点滴经验,形成了《Perl语言入门(第5版)》特有的教学节奏,以及务实的知识点取舍。随文而至的习题,可以让你及时巩固各种概念,强化理解和吸收。《Perl语言入门(第5版)》容涵盖: ·Perl的变量类型 ·子程序 ·文件的操作 ·正则表达式 ·字符串的操作 ·列表与排序 ·进程的管理 ·智能匹配 ·第三方模块的使用 有些人只是想要完成任务,Perl语言为此而生。Perl的最初目标只是为了协助Unix系统管理员完成日常繁琐的文本数据处理工作。时至今日,Perl已发展成为一套功能齐备的程序语言,几乎可以在任何操作系统上完成各种任务——从简单的命令行工具到Web应用开发,及至生物信息学、金融数据分析等等不一而足。其他书籍可能会着重于教会你使用Perl语言来编程,可《Perl语言入门(第5版)》不同,我们是想要你成为一名真正的Perl程序员。

Tags
No tags
ISBN: 0596520107
Publish Year: 2012
Language: 中文
File Format: PDF
File Size: 3.2 MB
Support Statistics
¥.00 · 0times
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

(This page has no text content)
欢迎阅读《Perl语⾔⼊门》第五版,此版本顺应Perl 5.10及其后续版 本的新特性⽽更新。当然,如果你还在⽤Perl 5.6 (这个版本已经发布很 久了,你还没想过升级?),这 本书同样适⽤于你。 假如你正在寻找⽤30到45⼩时就能掌握Perl语⾔编程的最佳⽅式, 那么你已经找到 了!在后⾯的300多⻚⾥,我们会提供精⼼安排的⼊门 指引,介绍这个在互联⽹中担 负重任的程序语⾔。它也是最受全世界 系统管理员、⽹络⿊客(web hacker)及业余程 序员⻘睞的程序语⾔》 我们不可能只花⼏⼩时就把Perl的全部知识传授给你,会这么保证 的书⼤概都撒了⼀ 点谎。相对地,我们慎选f Perl中完整⼜实⽤的部分 供你学习。这些材料⾜以编写128 ⾏以内的⼩程序,⼤约90%的Perl程 序都不需要很多篇幅。当你准备继续深⼊时,建 议您阅读《Intermediate Perl》这本书,该书涵盖了许多本书舍去不讲的部分。此外,我 们还纳 ⼊了许多知识点以便后续的扩展和研习。 毎章的内容并不多,可以在⼀两个⼩时之内读完。各章后⾯都有⼀ 系列的习题,帮助你 巩固刚学到的知识,在附录A中还附有习题解答, 供你⽐对思考。因此,本书可以说是 相当适合作为“Perl⼊门”的课堂教 材。我们对此有第⼀⼿的经验,因为本书的内容⼏ 乎是逐字逐句 从“Learning Perl”教学中萃取出来的,⽽这正是我们教过上千名学⽣的 招牌课程。话虽如此,我们也将本书设计成适合⾃学的形式。 虽然Perl是活⽣⽣的“Unix⼯具箱”,但你并不需要是Unix⼤师,甚 ⾄也不必懂Unix 就可以使⽤本书。除⾮特别注明,否则我们所提到的 ⼀切都可以同样应⽤到Windows版 本的ActivePerl (ActiveState出品), 以及许许.多多其他新潮的Perl版本。 阅读本书之前,虽然不需事先具备任何Perl的基础,但我们还是衷 ⼼希望你先熟悉⼀些写程序的概念,像变量(variable),循环(loop),⼦程序 (subroutine)和数组(array) 以及最重要的“⽤你最熟悉的⽂本编辑器来编 辑源代码”。我们不会花时间来尝试说明 这些概念。有些⼈平⽣所学的 第⼀个程序语⾔就是Perl,并因学习本书⽽获得成功,我 们相当髙兴有这 样的例⼦,但是我们并不敢保证每个⼈都能取得⼀样的成果。
排版约定 本书使⽤以下的字体惯例: 等宽字(Constant width) ⽤于⽅法名称(method name)、函数名称(function name)、变量 (variable)、属 性(attribute)以及程序代码范例。 等宽⿊体字(Constant width bold) ⽤于⽤户所输⼊的内容。 等宽斜体字(Constant width italic) ⽤于程序代码中可被替换的项⽬(例如:fiJena/ne,你可以将它代换 成实际的⽂ 件名>。 斜体字(Italic) ⽤于正⽂所提到的⽂件名称、URL、主机名称、第⼀次提及的重要 词汇以及命令。 脚注 —般附加在括号之内,初次(也许是第⼆次、第三次)阅读本书时 应该略过。有⼀ 些不完全正确的⽤语是为了简化说明,⽽脚注会说明 事实。通常脚注中的资料是髙 级主题,不会在本书其他部分讨论到。 使⽤程序代码范例 本书的⽬的是让你能够在实践中解决问题。基本上,你不⽤事先联 络我们就可以使⽤本 书所提供的程序代码及⽂件,除⾮是⼤量复制。 举例来说,在你的程序中,若⽤到⼏段 本书中的程序代码,不需要经 过我们的同意;但是做成光盘发布、销售O’Reilly书中 的例⼦,则必须 经过授权。回答别⼈的问题时,引⽤本书的⽂字和程序代码,也不需要 经过我们的同意,但在你的产品⽂件中,若⼤量加⼊本书的⽂字与程序 代码,则必须经 过授权。虽⾮必要,但我们会⼗分感谢你在引⽤本书 的内容和范例时提到出处。完整的 信息通常包括书名、作者、出版商 及ISBN编号。例如:"Learning Perl, Fifth Edition, by Randal L. Schwartz,
Tom Phoenix and brian d foy. copyright 2008 O’Reilly Media, Inc., 978-0- 596-52010-6。”。如果你的情况有别于上述情形,并⼼存疑问的话,请 给我 们来信 permissions@oreilly.com。
⽬录 前⾔ 第⼀章 简介 问题与答案 第⼆章 标量数据 第三章 列表与数组 第四章 ⼦程序 第五章 输⼊与输出 第六章 哈希 第七章 漫游正则表达式王国 第⼋章 以正则表达式进⾏匹配 第九章 ⽤正则表达式处理⽂本 第⼗章 其他控制结构 第⼗⼀章 Perl模块 第⼗⼆章 ⽂件测试 第⼗三章 ⽬标操作 第⼗四章 字符串与排序 第⼗五章 智能匹配与given-when结构 第⼗六章 进程管理 第⼗七章 ⾼级Perl技巧 附录A 习题解答 附录B 超越⼩骆驼
前⾔ 本书的历史 为了满⾜读者的好奇⼼,Randal在这⾥告诉你关于这本书的来历: 1991年我跟Lairy Wall写完第⼀本《Perl语⾔编程)> 之后,硅⾕的 Taos Mountain Software公司跟我联络,要我准备⼀些培训课程,内容包 含12次左右的课程,并训练 他们的教师继续开课。我就按约写了这个 课程给他们【注1】。 在课程进⾏了三四次之后(1991年底>,有个⼈⾛到⾯前跟我 说:“不瞒你说,我真地 很喜欢《Perl语⾔编程》这本书,但是这堂课的 教材更容易吸收,你真地应该写⼀本像 这个课程的书。”这听起来像是 个好机会,所以我开始认真地考虑这个点⼦。 我写信给Tim O’Reilly,附上了⼀份企划书。这是以Taos Mountain课 程纲要为基础, 再根据课堂上的观察调整并修改了⼀些章节。这可能 是有史以来我的企划书最快被接受的 记录——我在15分钟后收到了 Tim 的回信我们⼀直在等待你的第⼆本书。《Perl语⾔ 编程》太热销了?”接 下来的⼀年半时间⾥,我就努⼒完成了第⼀版的《Perl语⾔⼊门》。 在那段时间⾥,我找到珪⾕以外教授Perl的机会【注2】,所以我就 以正在编写阶段的 《Perl语⾔⼊门》为蓝本制作了⼀套课程。我为许多 不同的客户教课(包括我的主要签 约⼈Intel Oregon),并利⽤上课所得到 的响应进⼀步微调本书的草稿。 第⼀版在1993年的11⽉⼁⽇【注3】问世,销售空前成功,甚⾄很 快就追上了《Perl 语⾔编程》的销董。 在第⼀版的封底上这么写着:“由卓越的Perl讲师所著”,事后证明 这是正确的预⾔。随 后的⼏个⽉⾥,我收到来⾃美国各地的电⼦邮 件,邀请我到他们那⾥教Perl。接下来的 7年中,我的公司成了全球领 先的Perl现场培训公司,我个⼈的⻜⾏⾥程数也飙升到了 百万英⾥。之
后互联⽹的兴起更是锦上添花,许多站⻓都采⽤Perl作为内容管理、交 互式CGI及⽹站维护的语⾔。 注1: 在合约中,我保留了习題的所有权,我希望有⼀天能以不同的 ⽅式来使⽤它们,⽐如说 我以前tf经写过的杂志专栏.习題是Taos公司的 课程⾥唯⼀还能在本书中出现的东⻄。 注2: 我与Taos公司的合约有条独特的条款,因此不能在砝⾕教授类 似的课程,我也遵守了 此条款很多年, 注3: 这个⽇期我记得很清楚,因为那也是我由于⼀些跟计算机有关 的⾏为在家祓速捕的⽇⼦。 关于我与Intel公司的合约,我被判有》。 我跟Stonehenge的⾸席培训师兼内容经理Tom Phoenix密切合作了两 年。我请他对 Llama课程做实验,把某些东⻄移来移去,再打散⼀些内 容。当他带着我们认为是最好 的修订本出现时,我就联络O’Reilly, 说:“是该有本新书的时候了! ”于是第三版就 这么诞⽣了。 在⼩骆驼书第三版问世的两年后,我和Tom决定把⼀些“髙级”的课 程移出来成为⼀ 本独⽴的、专门给需要写“100到10000⾏代码”的⼈看的 书,那就是在2003年完成 的⽺驼书。 不过,在我的同事brian dfoy从海湾战争回来之后,同样是讲师的他 注意到教材必须 进⼀步适应普通学⽣的需求,因此这两本书都应该适 当地改写。于是他对O’Reilly推 销这个想法,希望在Perl 6完成之前进⾏ ⼩骆驼书与⽺驼书的最后⼀次改版(但愿如 此)》⽽此版本的确反映 了那些变动的需求。我很少需要给brian什么建议,他⼀向都 是顶尖的 作者,在写作团队⾥⾯他给⼈的感觉就像是尽责的英国管家。 2007 年 12 ⽉ 18 ⽇,“Perl 5 掌门⼈”(peri 5 porters)发布了 Perl 5.10, ⼀个标志性的 版本,融⼊了众多新特性。之前的5_8版本专注于Perl的 基础架构改良和Unicode⽀ 持。⽽最新的版本,以稳固的5.8为基础,增 加了⼀系列崭新的特性,特别是那些取⾃ 正在开发中(尚未发布)的 Perl 6的⼀些理念。其中某些特性,诸如正则表达式⾥的 命名捕捉,⽐
起传统做法来要好很多,对Perl初学者来说也更容易掌握。我们未曾想 过本书会有第五版,但Perl 5.10实在是太有趣了,我们⽆法故步不前。 读者可能注意到了这⼀版跟前⼀版本的某些差异: ? 某些内容为Perl 5.10⽽更新,某些代码仅在此新版本中可⽤。在 讨论Perl 5.10的 特性时,我们会在⾏⽂中加以提⽰说明。对于那些代码 ⽚段,我们也⼀律使⽤特殊 的use语句加以区别,提⽰你使⽤正确的版 本: use 5.010; #当前脚本需要Perl 5.10或更髙版本 如果在代码⽰例中没有看到use 5.010这句话,就说明它也可以在 Perl 5.6以 上版本中⼯作。要看当前使⽤何种版本,可在命令⾏使⽤-v 参数查看: prompt% peri -v 这⾥列举⼀些我们将要讨论到的Perl 5.10?新特性,及其相应章节。 介绍这些新特 性的同时,我们还会展⽰如何⽤⽼的⽅法实现相同的功 能: ? 有很多Perl 5.10的新特性是有关于正则表达式的,包括相对反向 引⽤(第七章), 新的字符集简写(第七章)和命名捕捉(第⼋ 章)。 ? Perl 5.10包含⼀个新的条件切换语句,称作given-when。我们会在 第⼗五章 中同智能匹配操作符⼀同讲解。 ? ⼦程序现在可以像C—样拥有静态变量,不过在Perl⾥称为state变 量。这类 变ft能在⼦程序的多次调⽤之间保留其中的值,且作⽤域限于 ⼦程序内。我们会在 第四章中阐述此特性。 致谢 来⾃Randal 我想要感谢Stonehenge过去与现在的讲师们(Joseph Hall、Tom Phoenix、Chip Salzenberg、brian d foy与Tad McClellan),谢谢他们愿意每
周到教室授课并且带回⾃ ⼰的笔记,注明哪部分有⽤(及哪部分没 ⽤),如此我们才能调整这本书的内容。我要 特别点名Tom Phoenix,我 的共同作者与事业伙伴,他花了⼤量时间改进Stonehenge 的Llama课 程,也为本书注⼊了主要的原始内容,还有brain d foy,在第四版中担任 了主要的写作任务,从⽽完成了我从收件箱转发的⽆数待办事项。 此外,我还要感谢O’Reilly的毎⼀位⼈员,尤其是我们⾮常有耐⼼与 眼光的编辑Allison Randal (不是我的亲戚,但她的姓⽒拼法真好)。还 有Tim O’Remy本⼈,是他让我在 —开始就有写作⼤骆驼与⼩骆驼这两 本书的机会。 我由衷感谢过去购买本书的读者,这些钱让我免于流浪街头与夜宿 囚牢I感谢我班上的 学⽣,他们把我训练成为⼀名更好的讲师,还有“财 富⼀千”上⼤排⻓⻰、在过去选购 我们的课程、未来也会继续捧场的客 户们。 和以前⼀样,我得特别感谢Lyle与Jack,他们教会了我⼏乎所有关于 写作的知识,我 永远不会忘记你们。 来⾃Tom 我必须附和Randal对O’Reilly的每个⼈致上谢意。在第三版的时 候,我们的编辑是 Linda Mui,她细⼼地指出书中太过⽕的玩笑与脚注, 当然留下来的那些也不是她的错。 她与Randal在整个写作过程中不断指 导我,我⾮常感激,在第四版中,Allison Randal 成为了我们的新编 辑,我也由衷感谢她。 另⼀些跟Randal —样要感谢的是Stonehenge其他的讲师们,当我临 时更新课程教材 以尝试新的教学技巧时,他们⼏乎不曾抱怨过。在教 学⽅法上,你们提出了许多我未曾 想过的主意。 多年来,我在俄勒冈科学与⼯业博物馆(Oregon Museum of Science and Industry, OMSI)⼯作,⽽我要感谢那⾥的⼈们,他们迫使我 磨练⾃⼰的教学技巧,让我学着在 每个聚会、展⽰与讲解中插⼊⼀两 个笑话。
谢谢新闻组上的伙伴们,你们对我的每个贡献都给予赞赏与⿎励。 如同以往,希望这些 对各位有所帮助。 谢谢我的众多学⽣,在我尝试变换⾓度,以解释某个概念的时候, 他们能提出疑问(附 赠⼀脸迷惑)。希望本书的新版可以解除剩下的 难题。 当然,最诚挚的感谢特别留给与我共同创作的作者,Randal。他给 予我⾼度⾃由,让我 可以在课堂上(以及书中)尝试各种讲述⽅法, ⽽且时刻敦促我将这些阐述写⼊书中。 还有⼀点务必要和Randal说的: 我被你深深感动,你热⼼劝勉他⼈,免于为了像你⼀ 样的官司⽽耗费 ⼤量的时间与精⼒,你是良好的典范。 谢谢我的妻⼦Jernia,谢谢你如此温柔体贴,为⽣活中⼤⼤⼩⼩的事 感谢你。 来⾃brian 我必须先谢谢Randal,因为我就是从本书的第⼀版开始学习Perl 的。⽽在1998年他 要我进⼊Stonehenge开始讲课时,我⼜得再仔细读⼀ 遍!要学⼀件事的最好⽅法通常 就是先去教。在那之后,只要他认为 我该学的,Randal都经常指点我,不管是Perl还 是其他⽅⾯的事。例如 在⼀次⽹络会议上,他决定我们应该⽤Smalltalk来展⽰,不要 ⽤Perl。 我总是很惊讶于他渊博的知识。⼀开始就是他建议我写与Perl有关的东 ⻄, 现在我才能够回应他,帮助完成了本书的编写。Randal,我感到⾮ 常荣幸。 在任职于Stonehenge的期间,跟Tom Phoneix⻅⾯的时间恐怕还不到 两星期,但我多 年以来都是⽤他的教材来上我们的Perl课程。他的版本 后来成为本书的第三版。在使 ⽤他的教材时,我也学到了解释任何概 念的新⽅式,也深⼊了 Perl的更多领域。 说服Randal让我参与⼩骆驼书的改版之后,我负责写出企划书、维 护全书⼤纲以及版 本控制。.我们第四版的编辑Allison Randal不但在这 些事情上给予了很多帮助,也收 到了我的许多电⼦邮件⽽没有怨⾔。
特别感谢跟 Per⼁没有关系的 Stacey、Buster、Mimi、Roscoe, Amelia、Lila以及许多 ⼈,不但在我很忙碌的时候带我散⼼,还在我不 能出去玩的时候⼀直跟我闲聊。 来⾃我们⼤家 感谢我们的校稿⼈员 David H. Adler、Andy Armstrong, Dave Cross、 Chris Devers、 Paul Fenwick、 Stephen B. Jenkins, Matthew Musgrove、Steve Peters 与 Wil Wheaton, 谢谢他们对本书草稿所提的建 议。 感谢我们的众多学⽣,这些年来让我们知道这个课程的内容在哪些 部分需要改善。_为 你们,我们今天才得以对本书如此⾃豪。 感谢诸多Pejl推⼴组(Perl Mongers)在我们访问各位的城市时给我 们宾⾄如归的招 待。什么时候我们会再来的。 最后,向我们的朋友Larry Wall致上最诚挚的谢意,他慷慨与⼤家 分享这个新颖⼜强 ⼤的⼯具(也是玩具),让我们能够更快、更简单 以及更有趣地完成我们的⼯作。
第⼀章 简介 欢迎阅读这本⼩骆能书(Llama book) ! 从1993年迄今(第五版),本书已拥有⼤约50万名的读者。我们最 ⼤的期盼是读者们 喜欢本书的内容。可以确定的是,在写作当时我们 是乐在其中的。 问题与答案 你或许有些关于Perl的问题,如果你已经快速翻阅过本书,⼤概知 道书中的内容,也 可能有些关于本书的问题。所以,我们打算利⽤这 ⼀章予以回答。 这本书适合你吗? 如果你的个性和我们差不多,现在你可能正站在书店⾥,考虑是否 应该买下这本 ⼩骆驼书来学习Perl,或是选择⾝旁讲别的语⾔的书,像以 蛇、某种饮料或是某个字⺟命名的书。还有两分钟,这家店的经理就会 过来告诉你:这⾥不是图书馆, 你要么就买点东⻄,要么就给我滚 蛋。也许你想利⽤这两分钟⻢上看个简单的Per⼁程 序,这样你才有办 法知道Perl究竟有多强⼤,它到底能做些什么。如果你是这么想的 话, 请参考本章后⾯的“⾛⻢观花” ⼀节。 为何有这么多的脚注? 感谢你注意到了,这本书⾥真的有很多的脚注。忽略它们吧。之所 以需要它们是因为 Perl到处充斥着特例。这算得上是好事,因为现实⽣ 活中也是到处都有特例。 就是因为有这些特例,我们不能昧着良⼼说“fizzbin操作符可⽤来 对hoozistaitc变S 进⾏frobnicate处理”,却不加上脚注来说明例外情况。 我们很有良⼼,所以加 上了这些脚注。但即使略过不读,你也可以问 ⼼⽆愧(这段话能成⽴,实在很有意思)。
许多的例外与可移植性有关。Perl来⾃Unix系统,⽽且⽬前仍扎根 于Unix中,与 Unix息息相关。但⽆论是因为在Unix以外的系统上运⾏ (或是别的什么原因)造成 的,我们总是尽⼒呈现可能出现的意外状 况。我们希望不懂Unix的读者们也能认为这 是⼀本相当好的Perl⼊门书 (⽽且你也可以因此⽽免费学到⼀点Unix的知识)。 其他的例外状况则与所谓的“80-20”定律有关。这是说Perl⾥80%的 功能可以⽤⽂ 档中20%的部分加以描述,⽽另外20%的功能却需要占据 其他80%的篇幅。所以, 为了保持本书的篇幅短⼩,我们在正⽂中介绍 那些简单明了的东⻄,把意味深⻓的部分留 在脚注中介绍(脚注将⽤ ⼩⼀号的字体,这样就可以⽤更少的位置写更多的东⻄)。 当你在不 看脚注的情况下将本书读完⼀遍后,也许是为了查资料,你会想要翻回 到之前的某些章节。此时,如果你已经好奇得忍不往,那么就去读读脚 注吧。它们中有很多只 不过是计算机笑话⽽已。 ‘ 关于习题和解答? 每章的结尾都有练习题,因为我们都曾以相同的教材教过上千名学 ⽣。所以我们 精⼼设计了这些习题,让你有机会尝试⼀般⼈常犯的错 误。 不是说我们希望你犯错,⽽是你需要这样的机会。因为⼤部分的错 误在你的Perl编程 ⽣涯中都会出现,还不如现在先体验。有了前⻋之鉴 (完成练习时你犯过的那些错误), 在你赶进度交付Perl程序时就不会 重蹈覆辙了。另外,在这个过程中我们会⼀直伴随 着你:附录A⾥有我 们对习题的解答以及⼀些相关的说明——说明你犯的(以及没犯 的) 错误。当你做完这些习题之后,可以核对⼀下答案。 在你努⼒尝试克服问题之前,尽量先不要偷看答案。在⾃⼰找出答 案的情况下完成习题, 学习的效果会⽐直接看答案来得好。就算⼀直 想不出答案,也不要⽼是⽤头撞墙,不⽤ 那么在意,就先翻到下⼀章 吧。 即使你没有犯任何错误,在你做完习题之后也应该看⼀下解答,其 中的解释会说明⼀些 (乍看之下或许)并不明显的细节。
想要额外再练习的话,可以翻翻《Learning Perl Student Workbook》 (O’Reilly)这本 书,每个章节都增补了许多习题。 习题前标的数字代表什么意思? 每个习题之前都会有个数字,是以⽅括号框起来的,看起来像这 样: 1. [2]当⽅括号⾥的数字2出现在习题之前时,表⽰什么意思? 这个数字是我们(⾮常粗略地)估计你完成这部分的练习需要花费 的时间。那只是⾮常 粗略的估算,所以如果你已经全部完成(包括编 写、测试和调试)⽽只⽤了⼀半的时间, 或是花了两倍的时间还没完 成,都请不要太惊讶。另⼀⽅⾯,如果你真的被难倒了,我 们也不会 告诉别⼈,你的答案是偷看附录A得来的。 如果我是教Perl课程的讲师? 如果你想在⾃⼰的课程⾥以本书作为教材(多年来有许多⼈都这样 做),请留意我们对 各章习题的设计,都尽量让⼤部分的学⽣能在45 分钟到1⼩时之内完成,再留下⼀些 休息的时间。某些章节的习题需要 的时间会少⼀些,某些章节则要多⼀些。会出现这种情况,是因为在填 完⽅括号⾥的数字后,我们发现⾃⼰竟然不会算加法(好在我们还知 道要怎么让计算机帮我们做这件事)。 之前提到过,我们还有⼀本辅助⽤书,《Learning Perl Student Workbook》,其中为毎 个章节都额外增加了若⼲习题。如果你已经有第 四版的这本⼯具书的话,请注怠调整⼀ 下章节的顺序,这次我们新增 了⼀章,并作了些次序上的调整。 “Perl”这个词是什么意思? Perl是实⽤摘录与报表语⾔( Practical Extraction and Report Language)的缩写,不过 有时候也被称作病态折中式垃圾列表器 (Pathologically Eclectic Rubbish Lister),此外还 有其他不同的全名展开 ⽅式。Perl是个溯写字(backronym),⽽不是缩写词,是Perl这 个词本⾝ 先被使⽤,后来才给出展开的词作诠释。这也就是为什么“Perl”不会全
部⽤⼤ 写来表⽰的原因。我们⽆需争辩这两种全名哪个是对的,它们 都受到Larry的认可。 你可能会在某些⽂章⾥看到以⼩写P来表⽰"peri”。⼀般说来,⼤写 P表⽰的“Perl” 指的是程序语⾔,⽽⼩写P表⽰的“peri”指的则是实际编 译并运⾏程序的解释器。 Larry为什么要创造Perl? 在20世纪80年代中期,他想要实现某个bug汇报系统,从⽽为类似 新闻组的⽂档系 统产⽣报表,这超出了 flwA的能⼒范围。⾝为懒惰的 程序员,Larry决定写个 多⽤途的⼯具,让它不仅能解决这个问题,还 能在别的地⽅使⽤。Perl第零版就这样诞 ⽣了。 Larry为什么不⽤其他的语⾔? 世界上不缺乏程序语⾔,不是吗?但是在当时,Larry却找不到任 何真正符合他需要的 语⾔。如果时下的某种语⾔在当年就能够出现的 话,Larry或许就会使⽤它了。他当时 需要的是像shell或—样能够快速 编程,⼜具有类似grep' cut、sort和sed的⾼级 功能,⽽不必回头使⽤像C 这种类型的语⾔。 Per]试图填补低级语⾔(如C、C + +或汇编语⾔)和⾼级语⾔(如 shell编程)之间的 空隙。低级语⾔通常既难写⼜丑陋,但是执⾏速度很 快⽽且不受限制。在任何机器上, 都很难赢过写得好的低级程序的执 ⾏速度。它们⼏乎可以做所有事。⾼级语⾔是另⼀个 极端,它们通常 速度缓慢、难写⼜丑陋,并且限制重重。如果系统上不提供执⾏必要功 能的某个命令,那么你的shell程序会有很多事情都不能做。⽽Perl则相 当容易,⼏乎 不受限制,速度通常⼜很快,就是看起来有点丑陋。 我们来看看上⾯所说的Perl的四个特性: ⾸先,Perl很容易。不过接下来你会发现这指的是容易使⽤。学习 Perl并不会特别容 易。如果你会开⻋,你⼀定是花了好⼏个星期或⼏个 ⽉的时间来学习,最后开起来才会 那么容易。当你花在写Perl程序上的 时间和学开⻋的时间⼀样⻓时,Perl对你⽽⾔就 会很容易了。
Perl⼏乎不受限制,⼏乎没什么事是Perl办不到的。你⼤概不会想 ⽤Perl来编写中断 -微内核层次(interrupt-microkernel-level)的设备驱动 程序(尽管已经有⼈这么做了), 但是⼀般⼈⽤来处理⽇常琐事的程 序,从写完即丢的⼩程序到企业级的⼤型应⽤程序, 都很适合⽤Perl来 写。 Perl的速度通常很快。这是因为所有Perl的开发者同时也都是⽤ 户,所以我们都希望 它快。假设有⼈为Perl加上某个确实⾮常酷的功 能,可同时会让其他程序变慢,那么 Larry ⼀定会拒绝加⼊这个新功 能,直到我们找出让它变快的⽅法为⽌。 Perl有点丑陋,这是事实。Perl的标志是骆驼,这来⾃于值得尊敬 的⼤骆驼书(即《Perl 语⾔编程》,由 Larry Wall、Tom Christiansen 和 Jon Orwant 合著,O’Reilly 出版)的封⾯, 这本⼩骆驼书(以及姐妹作 ⽺驼书Alpaca)算是该书的表亲。骆驼⻓得也有点丑陋,但 是它们努⼒ ⼯作,哪怕是在严酷的环境下也⼀样。骆驼能在种种不利的条件下帮你 把事情 搞定,哪怕它们⻓相丑陋,⽽且⽓味更糟,有时候还会对你吐 ⼝⽔。Perl就有⼀点像这样。 Perl⽤起来究竟是容易还是困难? 它简单好⽤,但有时候不太好学。当然,这只是⼀般⽽⾔。在 Larry设计Perl的时候, 他必须做出许多取舍。每当他有机会让程序员感 到⽅便、但让学Per]的⼈觉得不便时,他 ⼏乎每次都站在程序员这边。 这是因为你只需要学⼀次Perl,但却可以常常使⽤。 注10: 如果你每周或每个⽉只花⼏分钟的时间在程序设计上,容易 学习的语⾔会⽐较合适,因 为在你下次使⽤时可能就忘光了。Perl是为 每天⾄少花20分钟写程序(⽽且以Perl程 序为主)的程序员⽽设计的。 Perl有不少简便操作⽅式可以让程序员节省时间。举例来说,⼤部 分的函数都具有默认 ⾏为,它通常就是你使⽤该函数时想采取的⽅ 式。因此,你会看到如下的Perl程序代 码: while (<>) { chomp;
print join("\tB, (split /:/) [0, 2, 1, 5] ), "\n°;} 要是不使⽤Perl的默认⾏为与简写,那么上⾯这段程序的⻓度⼤概 会增⻓⼗⼏倍,这 样⼀来,阅读与编写的时间也会⼤幅增加。它会⽤ 到更多的变量,让维护和调试也更加 困难。如果你已经能看懂⼀点Perl, 你将会发现上⾯的程序⾥没有变址,这是问题的重 点。这⾥⽤到的变 铋都是以默认⾏为来⼯作的。但是,让程序员容易使⽤的这些功能是 要在学习时付出代价的,你得先学会这些默认⾏为与简写才⾏。 例如,在英语⾥⼤家常会使⽤缩写,并不会觉得不妥。没错,“will not”跟“won’t”这 两种写法的意义⼀模⼀样。但是⼤家都会说“won’t”, ⽽不太会说“will not”。⼀来因 为⽐较省时间,⼆来因为⼤家都熟悉这 样的模式。同样,Perl也会缩写常⽤的“字句”, 把许多难写的程序浓缩 成简洁有⼒的“成语”,好让维护⼈员能够快速地“听说” Perl。 ⼀旦熟悉Perl之后,你就可以花更少的时间去摆弄shell的引⽤(或C 语⾔的声明>, 有更多的时间来浏览⽹站。这是因为Perl能让你事半功 倍。Perl简明的语法让你能够 (亳不费⼒地)建⽴很酷⽽且更流畅的解 决⽅案,或是⽤途⼴泛的⼯具程序。由于Perl 既跨平台⼜随处可⽤,所 以这次实现的⼯具可以在下次的任务⾥沿⽤,让你有更多的时 间浏览 ⽹站、充实⾃⼰。, Perl是⾮常髙端的语⾔。这表⽰程序代码的密度相当⾼,Perl程序 代码的⻓度⼤约是等 效的C程序代码的30%到70%左右。这使得编写、 阅读、调试和维护Perl程序的效 率⾮常髙。哪怕只写过⼀点程序的⼈都 明⽩,当⼦程序⼩到能够放进⼀个屏幕时,开 发时就能免于上下滚动 代码。此外,既然程序⾥bug的数量⼤致与源代码的⻓度成正 ⽐(⽽不 是与程序的功能成正⽐),较短的Perl程序代码平均起来会含有较少 的 bug. 像任何语⾔⼀样,Perl也可以变成“只写”(write-only),它可以写出 让⼈完全看不懂 的程序。但只要你稍微⽤⼼,就可以避免这项常⻅的 恶名。没错,Perl程序对门外汉来说,看起来可能像线路噪声;但是对 经验丰富的Perl程序员来说,它看来就像⼤交响 乐团的总谱。你只要遵
照书⾥的指引,就能写出易于阅读且易于维妒的程序,它们⼤概 赢不 了模糊 Perl 代码⼤赛(Obfuscated Perl Contest)。 Perl怎么会这么流⾏? Larry稍加测试Perl,并在各处加点功能之后,把它发布给Usenet的读 者社群,也就 是⼀般所谓的“⽹络”。这群散居世界各处的(上万名)⽤ 户给了 Larry反馈,要求Perl 做这个、做那个,其中有许多事情是Larry 从来没有想到要让他的⼩Perl去处理的。 结果是,Perl不断成⻓。它的功能变多了,能执⾏它的平台也增加 了。当年这个只能在 少数⼏种Unix系统上执⾏的⼩语⾔,⽽今⻓成了 具有上千⻚的在线⾃由⽂档、成打的 书籍、数个主流的Usenet新闻组 (以及成堆的新闻组与邮件列表)、新闻组⾥⽆数的读 者,还有时下 ⼏乎所有系统皆可使⽤的版本。当然,也还有这本⼩骆驼书。 Perl⽬前的发展如何? Larry Wall已经不再亲⾃编写所有的Perl核⼼代码,但他仍然指引开 发的⽅向并作出 关键性的决策。⽬前维护Perl的是⼀个热⼼的开发者团 队,我们称之为“Perl 5掌门 ⼈”。要跟进他们⽬前的任务与话题,可以 加⼊他们的邮件列表perl5-porters@perl.org。 在我们写下这段⽂字的同时(2008年3⽉),有许多事情正围绕着 Perl发⽣。在过去 ⼏年⾥,有许许多多的⼈投⼊到下个重要版本的开发 中:Perl 6。 但别这样就把Perl 5给扔了,因为那是时下最稳定的版本。⽬前来 说,稳定的Perl 6还 不会那么快出现,Perl 5也不会这么快消失,⼈们应 该会同时使⽤这两个版本的Perl 好⼏年。Perl 5掌门⼈也会⼀如继往地 维护Perl 5’并且从Perl 6中吸收更多好⽤的点 ⼦。⽽我们继续修订此 书,恰恰是因为从刚刚⾯世的Perl 5.10⾥可以看出Perl 5掌门 ⼈在后续 的Perl 5.12上已经展开了相关⼯作,Perl 5活⼒不减。 在2000年的时候,Perl社群正在进⾏Perl的重写,Larry Wall率先提 出了下个主要版 本的规划。次年,⼀个名为Parrot的解释器诞⽣了,但
⼤部分的⽤户并没有感受到太 多变动。⽽在2005年,唐宗汉开始牵头 启动Pugs (Perl User Golfing System)项⽬, 这是以Haskell语⾔实现的轻 量级Perl 6。全世界(不论是Perl⽅⾯还是Haskell⽅⾯) 的开发⼈员都 参与进来并提供了协助。因为⽬前还在发展中,所以我们不敢下定论, 但 你已经可以⽤Pugs来写简单的Perl 6程序了。关于Perl 6的详情,请看 http:llperlsix.org 和/i?p.7/www.pKgsco(ie.org。⽬前就此书⽽⾔,我们暂 时还不⽤担⼼Perl 6的事情。 哪些事情最适合⽤Perl来做? Perl很适合在三分钟内写出“急功近利”的程序,Perl也很适合⽤来编 写⽤处⼴泛、需 要⼗⼏个程序员花三年时间完成的⼤型程序。当然, 你会发现⼤部分的程序从构思到完 成测试,只需要花⼀⼩时以内的时 间。 Perl檀⻓处理整体来说“约有90%与⽂字处理有关,10%与其他事务 有关”的问题。 这似乎占了当前编程任务需求的绝⼤部分。在理想的世 界中,所有的程序员都会每种语 ⾔,进⾏每个项⽬时,他们都能选择 最适合的语⾔。通常,他们会选择Perl。 虽然在Larry创造Perl时,那时 Web甚⾄还没在Tim Berners-Lee的脑海中闪现,可 是两者却在⽹络上结 合了。有些⼈宣称Perl在20世纪90年代初期的扩张,让许多信 息的内容 能迅速地转换成HTML格式,使得互联⽹得以延续。当然,Perl也是⼩ 型CGI 脚本(由Web服务器运⾏的程序)的最佳搭档语⾔。直到现在, 许多搞不清楚状况的 ⼈,还会提出像“CGI不就是Perl吗? ”或“除了 CGI 之外,Perl还有什么⽤呢? ” 这样的问题。我们觉得这些似是⽽⾮的问 题挺好笑的。 哪些事情不适合⽤Perl来做? 所以,既然Perl能做的事情这么多,哪些事不‘适合⽤它做呢?嗯, 如果你想做出封闭 式的⼆进制可执⾏⽂件(op叫“e binary),请不要使⽤ Perl。所谓的“封闭式”,指的 是取得或购得你程序的⼈⽆法从程序⾥看 到你的秘密算法,因此也⽆法协助你进⾏维护 或调试。当你把Perl程序 给某⼈时,通常给的是源代码,⽽⾮封闭式的⼆进制可执⾏ ⽂件。
不过,如果你需要封闭式的⼆进制可执⾏⽂件,我们必须告诉你其 实没有这种东⻄。只 要有⼈能安装并运⾏你的程序,他就能将它还原 成各种程序语⾔的源代码。的确,该程 序代码可能和原本的不⼀样, 但是它总是某种源代码。不幸的是,要保护你的秘密算法, 真正的办 法只有⼀种:聘⽤⾜够多的律师?他们能写出⼀份授权条款,上⾯说“你 可以 ⽤这个程序做这件事,但是不能做那件事。要是你违反了我们的 规定,我们有⾜够多的 律师能让你后悔莫及”。 ? 如何取得Perl? 你的机器上可能已经有Perl 了。⾄少,我们不管到哪⾥都可以找到 Perl。许多系统内 置Perl,⽽系统管理员经常会在单位⾥的每台机器上安 装Perl。不过就算在系统中找不 到Perl,你总还是可以免费取得它。 Perl有两种不同的授权条款。对只是使⽤Perl的⼤部分⼈来说,这 两种条款并没有什 么差别。不过如果你想修改Perl,请详细阅读这两份授 权条款,上⾯对发布变动过的 Perl有些限制。对于不想修改Perl的⼈⽽ ⾔,授权条款基本上是说:“这是⾃由软件 ——你爱怎么⽤都⾏。” 事实上,它不仅是⾃由软件,还能在⼏乎所有⾃称为Unix、具有C 编译器的系统上顺 利运⾏。你只要下载它,键⼊⼀两条命令,Perl就能 ⾃⾏设定与安装。还有更好的办法, 就是找到系统管理员,让他键⼊ 这⼀两条命令来帮你安装。除了 Unix和类似 的系统之外,对Perl上瘾的 ⼈们还将它移植到了别的平台上,如Mac OS X、VMS、 OS/2,甚⾄还包 括MS/DOS以及所有Windows的现代版本。在你看到这句话时,可 能⼜ 增加了更多平台【注15】。这些Perl的移植版本 CPAN是什么? CPAN就是Perl综合典藏⽹(Comprehensive Perl Archive Network),可 以说是⾮常⽅ 便的Perl卖场。⾥⾯有Perl本⾝的源代码、各种⾮Unk系 统的安装程序【注16】、范 例程序、说明⽂档、扩展模块以及跟Perl相 关的历史消息。简⽽⾔之,CPAN是包罗 万象的。
The above is a preview of the first 20 pages. Register to read the complete e-book.