欢迎阅读《Perl语言入门》第五版,此版本顺应Perl 5.10及其后续版本的新特性而更新。当然,如果你还在用Perl 5.6(这个版本已经发布很久了,你还没想过升级?),这本书同样适用于你。.
假如你正在寻找用30到45小时就能掌握Perl语言编程的最佳方式,那么你已经找到了!在后面的300多页里,我们会提供精心安排的入门指引,介绍这个在互联网中担负重任的程序语言。它也是最受全世界系统管理员、网络黑客(web hacker)及业余程序员青睐的程序语言。
我们不可能只花几小时就把Perl的全部知识传授给你,会这么保证的书大概都撒了一点谎。相对地,我们慎选了Perl中完整又实用的部分供你学习。这些材料足以编写128行以内的小程序,大约90%的Perl程序都不需要很多篇幅。当你准备继续深入时,建议您阅读《Intermediate Perl》这本书,该书涵盖了许多本书舍去不讲的部分。此外,我们还纳入了许多知识点以便后续的扩展和研习。
每章的内容并不多,可以在一两个小时之内读完。各章后面都有一系列的习题,帮助你巩固刚学到的知识,在附录A中还附有习题解答,供你比对思考。因此,本书可以说是相当适合作为“Perl入门”的课堂教材。我们对此有第一手的经验,因为本书的内容几乎是逐字逐句从“Learning Perl”教学中萃取出来的,而这正是我们教过上千名学生的招牌课程。话虽如此,我们也将本书设计成适合自学的形式。
虽然Perl是活生生的“Unix工具箱”,但你并不需要是Unix大师,甚至也不必懂Unix就可以使用本书。除非特别注明,否则我们所提到的一切都可以同样应用到Windows版本的ActivePerl(ActiveState出品),以及许许多多其他新潮的Perl版本。
阅读本书之前,虽然不需事先具备任何Perl的基础,但我们还是衷心希望你先熟悉一些写程序的概念,像变量(variable)、循环(loop)、子程序(subroutine)和数组(array)以及最重要的“用你最熟悉的文本编辑器来编辑源代码”。我们不会花时间来尝试说明这些概念。有些人平生所学的第一个程序语言就是Perl,并因学习本书而获得成功,我们相当高兴有这样的例子,但是我们并不敢保证每个人都能取得一样的成果。
排版约定
本书使用以下的字体惯例:
等宽字
用于方法名称(method name)、函数名称(function name)、变量(variable)、属性(attribute)以及程序代码范例。
等宽黑体字
用于用户所输入的内容。
等宽斜体宇
用于程序代码中可被替换的项目(例如:filename,你可以将它代换成实际的文件名)。
斜体字
用于正文所提到的文件名称、URL、主机名称、第一次捉及的重要词汇以及命令。
脚注
一般附加在括号之内,初次(也许是第二次、第三次)阅读本书时应该略过。有些不完全正确的用语是为了简化说明,而脚注会说明事实。通常脚注中的资料是高级主题,不会在本书其他部分讨论到。
如何与我们联系
本书的内容都经过测试,尽管我们做了最大的努力,但错误和疏忽仍然在所难免。如果你发现有什么错误或者是对将来的版本有什么建议,请通过下面的地址告诉我们:
.美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
100035北京市西城区西直门南大街2号成铭大厦C座807室
奥莱利技术咨询(北京)有限公司
你也可以发送电子邮件给我们。若是想要加入我们的邮件列表,或是索取书籍类目手册,可以发邮件到:
info@oreilly.com
询问技术问题或对本书进行评论,请发送邮件到:
bookquestions@oreilly.com
info@mail.oreilly.com.cn
我们还为本书建立了一个专属网页,你可以在此找到关于本书的相关信息,包括范例程序、勘误表,以及将来再版的计划等。该网页还提供一系列可下载的文本文件(以及一些Perl程序),在做本书练习的时候可以直接使用。此页面地址为:
http://www.oreilly.com?catalog/9780596520106(原版书)
http://www.oreilly.com.cn/book.php?bn=978-7-5641-1763-4(中文版)
其他关于本书或其他书籍的信息,请访问O'Reilly的网站:
http://www.oreilly.com
http://www.oreilly.com.cn
使用程序代码范例
本书的目的是让你能够在实践中解决问题。基本上,你不用事先联络我们就可以使用本书所捉供的程序代码及文件,除非是大量复制。举例来说,在你的程序中,若用到几段本书中的程序代码,不需要经过我们的同意;但是做成光盘发布、销售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。
本书的历史
为了满足读者的好奇心,Randal在这里告诉你关于这本书的来历:
1991年我跟Larry 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月1日[注3]问世,销售空前成功,甚至很快就追上了《Perl语言编程》的销量。
在第一版的封底上这么写着:“由卓越的Perl讲师所著”,事后证明这是正确的预言。随后的几个月里,我收到来自美国各地的电子邮件,邀请我到他们那里教Perl。接下来的7年中,我的公司成了全球领先的Perl现场培训公司,我个人的飞行里程数也飙升到了百万英里。之后互联网的兴起更是锦上添花,许多站长都采用Perl作为内容管理、交互式CGI及网站维护的语言。
我跟Stonehenge的首席培训师兼内容经理Tom Phoenix密切合作了两年。我请他对Llama课程做实验,把某些东西移来移去,再打散一些内容。当他带着我们认为是最好的修订本出现时,我就联络O'Reilly,说:“是该有本新书的时候了!”于是第三版就这么诞生了。
在小骆驼书第三版问世的两年后,我和Tom决定把一些“高级”的课程移出来成为一本独立的、专门给需要写“100到10000行代码”的人看的书,那就是在2003年完成的羊驼书。
不过,在我的同事brian d foy从海湾战争回来之后,同样是讲师的他注意到教材必须进一步适应普通学生的需求,因此这两奉书都应该适当地改写。于是他对O'Reilly推销这个想法,希望在Perl 6完成之前进行小骆驼书与羊驼书的最后一次改版(但愿如此)。而此版本的确反映了那些变动的需求。我很少需要给brian什么建议,他一向都是顶尖的作者,在写作团队里面他给人的感觉就像是尽责的英国管家。
2007年12月18日,“Perl 5掌门人”(perl 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% perl-v
这里列举一些我们将要讨论到的Perl 5.10新特性,及其相应章节。介绍这些薪特性的同时,我们还会展示如何用老的方法实现相同的功能:
有很多Perl 5.10的新特性是有关于正则表达式的,包括相对反向引用(第七章),新的字符集简写(第七章)和命名捕捉(第八章)。
Perl 5.10包含一个新的条件切换语句,称作giyen-when。我们会在第十五章中同智能匹配操作符一同讲解。
子程序现在可以像C一样拥有静态变量,不过在Perl里称为state变量。这类变量能在子程序的多次调用之间保留其中的值,且作用域限于子程序内。我们会在第四章中阐述此特性。
致谢
来自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'Reilly本人,是他让我在一开始就有写作大骆驼与小骆驼这两本书的机会。
我由衷感谢过去购买本书的读者,这些钱让我免于流浪街头与夜宿囚牢,感谢我班上的学生,他们把我训练成为一名更好的讲师;还有“财富一千”上大排长龙、在过去选购我们的课程、未来也会继续捧场的客户们。
和以前一样,我得特别感谢Lyle与Jack,他们教会了我几乎所有关于写作的知识,我永远不会忘记你们。
来自Tom
我必须附和Randal对O'Reilly的每个人致上谢意。在第三版的时候,我们的编辑是Linda Mui,她细心地指出书中太过火的玩笑与脚注,当然留下来的那些也不是她的错。她与Randal在整个写作过程中不断指导我,我非常感激。在第四版中,Allison Randal成为了我们的新编辑,我也由衷感谢她。
另一些跟Randal一样要感谢的是Stonehenge其他的讲师们,当我临时更新课程教材以尝试新的教学技巧时,他们几乎不曾抱怨过。在教学方法上,你们提出了许多我未曾想过的主意。
多年来,我在俄勒冈科学与工业博物馆(Oregon Museum of Science and Industry,OMSI)工作,而我要感谢那里的人们,他们迫使我磨练自己的教学技巧,让我学着在每个聚会、展示与讲解中插入一两个笑话。
谢谢新闻组上的伙伴们,你们对我的每个贡献都给予赞赏与鼓励。如同以往,希望这些对各位有所帮助。
谢谢我的众多学生,在我尝试变换角度,以解释某个概念的时候,他们能提出疑问(附赠一脸迷惑)。希望本书的新版可以解除剩下的难题。
当然,最诚挚的感谢特别留给与我共同创作的作者,Randal。他给予我高度自由,让我可以在课堂上(以及书中)尝试各种讲述方法,而且时刻敦促我将这些阐述写入书中。还有一点务必要和Randal说的:我被你深深感动,你热心劝勉他人,免于为了像你一样的官司而耗费大量的时间与精力,你是良好的典范。
谢谢我的妻子Jenna,谢谢你如此温柔体贴,为生活中大大小小的事感谢你。
来自brian
我必须先谢谢Randal,因为我就是从本书的第一版开始学习Perl的。而在1998年他要我进入Stonehenge开始讲课时,我又得再仔细读一遍!要学一件事的最好方法通常就是先去教。在那之后,只要他认为我该学的,Randal都经常指点我,不管是Perl还是其他方面的事。例如在一次网络会议上,他决定我们应该用Smalltalk来展示,不要用Perl。我总是很惊讶于他渊博的知识。一开始就是他建议我写与Perl有关的东西,现在我才能够回应他,帮助完成了本书的编写。Randal,我感到非常荣幸。
在任职于Stonehenge的期间,跟Tom Phoneix见面的时间恐怕还不到两星期,但我多年以来都是用他的教材来上我们的Perl课程。他的版本后来成为本书的第三版。在使用他的教材时,我也学到了解释任何概念的新方式,也深入了Perl的更多领域。
说服Randal让我参与小骆驼书的改版之后,我负责写出企划书、维护全书大纲以及版本控制。我们第四版的编辑Allison Randal不但在这些事情上给予了很多帮助,也收到了我的许多电子邮件而没有怨言。
特别感谢跟Perl没有关系的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,谢谢他们对本书草稿所提的建议。
感谢我们的众多学生,这些年来让我们知道这个课程的内容在哪些部分需要改善。因为你们,我们今天才得以对本书如此自豪。
感谢诸多Perl推广组(Perl Mongers)在我们访问各位的城市时给我们宾至如归的招待。什么时候我们会再来的。
最后,向我们的朋友Larry Wall致上最诚挚的谢意,他慷慨与大家分享这个新颖又强大的工具(也是玩具),让我们能够更快、更简单以及更有趣地完成我们的工作。...