Share E-Book

Perl语言入门(第五版) (5th Edition Learning Perl [Learning Perl etc.) (Z-Library)

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

Science
Language Chinese

《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程序员。

Format PDF
Size 3.2 MB
301
Views
0
Downloads
0.00
Total Donations
(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.

Page 1
(This page has no text content)
Page 2
欢迎阅读《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,并因学习本书⽽获得成功,我 们相当髙兴有这 样的例⼦,但是我们并不敢保证每个⼈都能取得⼀样的成果。
Page 3
排版约定 本书使⽤以下的字体惯例: 等宽字(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,
Page 4
Tom Phoenix and brian d foy. copyright 2008 O’Reilly Media, Inc., 978-0- 596-52010-6。”。如果你的情况有别于上述情形,并⼼存疑问的话,请 给我 们来信 permissions@oreilly.com。
Page 5
⽬录 前⾔ 第⼀章 简介 问题与答案 第⼆章 标量数据 第三章 列表与数组 第四章 ⼦程序 第五章 输⼊与输出 第六章 哈希 第七章 漫游正则表达式王国 第⼋章 以正则表达式进⾏匹配 第九章 ⽤正则表达式处理⽂本 第⼗章 其他控制结构 第⼗⼀章 Perl模块 第⼗⼆章 ⽂件测试 第⼗三章 ⽬标操作 第⼗四章 字符串与排序 第⼗五章 智能匹配与given-when结构 第⼗六章 进程管理 第⼗七章 ⾼级Perl技巧 附录A 习题解答 附录B 超越⼩骆驼
Page 6
前⾔ 本书的历史 为了满⾜读者的好奇⼼,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现场培训公司,我个⼈的⻜⾏⾥程数也飙升到了 百万英⾥。之
Page 7
后互联⽹的兴起更是锦上添花,许多站⻓都采⽤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的⼀些理念。其中某些特性,诸如正则表达式⾥的 命名捕捉,⽐
Page 8
起传统做法来要好很多,对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),谢谢他们愿意每
Page 9
周到教室授课并且带回⾃ ⼰的笔记,注明哪部分有⽤(及哪部分没 ⽤),如此我们才能调整这本书的内容。我要 特别点名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)⼯作,⽽我要感谢那⾥的⼈们,他们迫使我 磨练⾃⼰的教学技巧,让我学着在 每个聚会、展⽰与讲解中插⼊⼀两 个笑话。
Page 10
谢谢新闻组上的伙伴们,你们对我的每个贡献都给予赞赏与⿎励。 如同以往,希望这些 对各位有所帮助。 谢谢我的众多学⽣,在我尝试变换⾓度,以解释某个概念的时候, 他们能提出疑问(附 赠⼀脸迷惑)。希望本书的新版可以解除剩下的 难题。 当然,最诚挚的感谢特别留给与我共同创作的作者,Randal。他给 予我⾼度⾃由,让我 可以在课堂上(以及书中)尝试各种讲述⽅法, ⽽且时刻敦促我将这些阐述写⼊书中。 还有⼀点务必要和Randal说的: 我被你深深感动,你热⼼劝勉他⼈,免于为了像你⼀ 样的官司⽽耗费 ⼤量的时间与精⼒,你是良好的典范。 谢谢我的妻⼦Jernia,谢谢你如此温柔体贴,为⽣活中⼤⼤⼩⼩的事 感谢你。 来⾃brian 我必须先谢谢Randal,因为我就是从本书的第⼀版开始学习Perl 的。⽽在1998年他 要我进⼊Stonehenge开始讲课时,我⼜得再仔细读⼀ 遍!要学⼀件事的最好⽅法通常 就是先去教。在那之后,只要他认为 我该学的,Randal都经常指点我,不管是Perl还 是其他⽅⾯的事。例如 在⼀次⽹络会议上,他决定我们应该⽤Smalltalk来展⽰,不要 ⽤Perl。 我总是很惊讶于他渊博的知识。⼀开始就是他建议我写与Perl有关的东 ⻄, 现在我才能够回应他,帮助完成了本书的编写。Randal,我感到⾮ 常荣幸。 在任职于Stonehenge的期间,跟Tom Phoneix⻅⾯的时间恐怕还不到 两星期,但我多 年以来都是⽤他的教材来上我们的Perl课程。他的版本 后来成为本书的第三版。在使 ⽤他的教材时,我也学到了解释任何概 念的新⽅式,也深⼊了 Perl的更多领域。 说服Randal让我参与⼩骆驼书的改版之后,我负责写出企划书、维 护全书⼤纲以及版 本控制。.我们第四版的编辑Allison Randal不但在这 些事情上给予了很多帮助,也收 到了我的许多电⼦邮件⽽没有怨⾔。
Page 11
特别感谢跟 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致上最诚挚的谢意,他慷慨与⼤家 分享这个新颖⼜强 ⼤的⼯具(也是玩具),让我们能够更快、更简单 以及更有趣地完成我们的⼯作。
Page 12
第⼀章 简介 欢迎阅读这本⼩骆能书(Llama book) ! 从1993年迄今(第五版),本书已拥有⼤约50万名的读者。我们最 ⼤的期盼是读者们 喜欢本书的内容。可以确定的是,在写作当时我们 是乐在其中的。 问题与答案 你或许有些关于Perl的问题,如果你已经快速翻阅过本书,⼤概知 道书中的内容,也 可能有些关于本书的问题。所以,我们打算利⽤这 ⼀章予以回答。 这本书适合你吗? 如果你的个性和我们差不多,现在你可能正站在书店⾥,考虑是否 应该买下这本 ⼩骆驼书来学习Perl,或是选择⾝旁讲别的语⾔的书,像以 蛇、某种饮料或是某个字⺟命名的书。还有两分钟,这家店的经理就会 过来告诉你:这⾥不是图书馆, 你要么就买点东⻄,要么就给我滚 蛋。也许你想利⽤这两分钟⻢上看个简单的Per⼁程 序,这样你才有办 法知道Perl究竟有多强⼤,它到底能做些什么。如果你是这么想的 话, 请参考本章后⾯的“⾛⻢观花” ⼀节。 为何有这么多的脚注? 感谢你注意到了,这本书⾥真的有很多的脚注。忽略它们吧。之所 以需要它们是因为 Perl到处充斥着特例。这算得上是好事,因为现实⽣ 活中也是到处都有特例。 就是因为有这些特例,我们不能昧着良⼼说“fizzbin操作符可⽤来 对hoozistaitc变S 进⾏frobnicate处理”,却不加上脚注来说明例外情况。 我们很有良⼼,所以加 上了这些脚注。但即使略过不读,你也可以问 ⼼⽆愧(这段话能成⽴,实在很有意思)。
Page 13
许多的例外与可移植性有关。Perl来⾃Unix系统,⽽且⽬前仍扎根 于Unix中,与 Unix息息相关。但⽆论是因为在Unix以外的系统上运⾏ (或是别的什么原因)造成 的,我们总是尽⼒呈现可能出现的意外状 况。我们希望不懂Unix的读者们也能认为这 是⼀本相当好的Perl⼊门书 (⽽且你也可以因此⽽免费学到⼀点Unix的知识)。 其他的例外状况则与所谓的“80-20”定律有关。这是说Perl⾥80%的 功能可以⽤⽂ 档中20%的部分加以描述,⽽另外20%的功能却需要占据 其他80%的篇幅。所以, 为了保持本书的篇幅短⼩,我们在正⽂中介绍 那些简单明了的东⻄,把意味深⻓的部分留 在脚注中介绍(脚注将⽤ ⼩⼀号的字体,这样就可以⽤更少的位置写更多的东⻄)。 当你在不 看脚注的情况下将本书读完⼀遍后,也许是为了查资料,你会想要翻回 到之前的某些章节。此时,如果你已经好奇得忍不往,那么就去读读脚 注吧。它们中有很多只 不过是计算机笑话⽽已。 ‘ 关于习题和解答? 每章的结尾都有练习题,因为我们都曾以相同的教材教过上千名学 ⽣。所以我们 精⼼设计了这些习题,让你有机会尝试⼀般⼈常犯的错 误。 不是说我们希望你犯错,⽽是你需要这样的机会。因为⼤部分的错 误在你的Perl编程 ⽣涯中都会出现,还不如现在先体验。有了前⻋之鉴 (完成练习时你犯过的那些错误), 在你赶进度交付Perl程序时就不会 重蹈覆辙了。另外,在这个过程中我们会⼀直伴随 着你:附录A⾥有我 们对习题的解答以及⼀些相关的说明——说明你犯的(以及没犯 的) 错误。当你做完这些习题之后,可以核对⼀下答案。 在你努⼒尝试克服问题之前,尽量先不要偷看答案。在⾃⼰找出答 案的情况下完成习题, 学习的效果会⽐直接看答案来得好。就算⼀直 想不出答案,也不要⽼是⽤头撞墙,不⽤ 那么在意,就先翻到下⼀章 吧。 即使你没有犯任何错误,在你做完习题之后也应该看⼀下解答,其 中的解释会说明⼀些 (乍看之下或许)并不明显的细节。
Page 14
想要额外再练习的话,可以翻翻《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”不会全
Page 15
部⽤⼤ 写来表⽰的原因。我们⽆需争辩这两种全名哪个是对的,它们 都受到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对你⽽⾔就 会很容易了。
Page 16
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;
Page 17
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程序员来说,它看来就像⼤交响 乐团的总谱。你只要遵
Page 18
照书⾥的指引,就能写出易于阅读且易于维妒的程序,它们⼤概 赢不 了模糊 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的解释器诞⽣了,但
Page 19
⼤部分的⽤户并没有感受到太 多变动。⽽在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程序 给某⼈时,通常给的是源代码,⽽⾮封闭式的⼆进制可执⾏ ⽂件。
Page 20
不过,如果你需要封闭式的⼆进制可执⾏⽂件,我们必须告诉你其 实没有这种东⻄。只 要有⼈能安装并运⾏你的程序,他就能将它还原 成各种程序语⾔的源代码。的确,该程 序代码可能和原本的不⼀样, 但是它总是某种源代码。不幸的是,要保护你的秘密算法, 真正的办 法只有⼀种:聘⽤⾜够多的律师?他们能写出⼀份授权条款,上⾯说“你 可以 ⽤这个程序做这件事,但是不能做那件事。要是你违反了我们的 规定,我们有⾜够多的 律师能让你后悔莫及”。 ? 如何取得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.

Recommended for You

Loading recommended books...
Failed to load, please try again later

Tip the Site

Scan the WeChat Pay or Alipay code to tip. No login required.

WeChat Pay
Alipay
Back to List