Perl
语言编程
第三版 ½者:Larry
Wall, Tom Christiansen, and Jon Orwant
译者:½伟平
第一部分
概述
第零章 前言
第一章
Perl
概述
第二部分
细节
第二章 集腋成裘
第三章 单目和双目操½符
第四章 语句和声明
第五章 模式匹配
第六章 子过程
第七章 格式
第八章 引用
第九章 数据结构
第十章 包
第十一章 模块
第十二章 对象(上)
第十二章 对象(下)
第十三章 重½½
第十四章,捆绑(tie)变量上
第十四章,捆绑(tie)变量下
第三部分
做为技术的Perl
第十五章
Unicode
第十六章 进程间通信
第十七章 线程
第十八章 编译
第十九章 ½令行接口
第二十章
Perl调试器
第二十一章 内部和外部
第四部分
做为文化的Perl
第二十二章
第二十三章
第二十四章
第二十五章
第二十六章
第二十七章
CPAN
安全
普通实践
可移植的
Perl
简单旧文档
Perl
文化
第五部分
参考资料
第二十八章 特殊名字
第二十九章 ½数(A-D)
第二十九章 ½数(E-N)
第二十九章 ½数(O-R)
第二十九章 ½数(S-Z)
第二十九章的所有½数单页版(A-Z)
第三十章 标准
Perl
库
第三十一章 用法模块
第三十二章 标准模块
第三十三章 诊断信息
--
LaserHe
- 11 Dec 2005
to top
第零章
Perl
前言
第零章
Perl
前言
1.
½求幸福
2.
这个版本有什么新东西
3.
标准的发布版
4.
在线文档
5.
阅读标准手册页
6.
搜索手册页
7.
非
Perl
手册页
8.
离线文档
9.
其它资源
9.1 Web
上的
Perl
9.2 Usenet
新闻组
10.
臭虫报告
11.
这本书里用的习惯
12.
感谢
1.
½求幸福
Perl
是一种½完成任务的语言。
½然,如果½的工½就是写程序,那么从理论上来讲,½可以½用任½“完整”的计算机 语言来完成任务。½是从我
们的经验来看,计算机语言的区别很大程度上不在它½干什么 ,而是在它做事情的时候是否简单。从一个极端来
说,那些所谓的第四代语言做某些事情 的时候相½容易,½是做其它一些事情的时候几乎不可½。从另外一个极端
来看,那些所 谓的工业级的语言在做任½事情的时候½几乎一样困难。
Perl
是不同的语言。从一开始,Perl 就设计成可以把简单工½简单化,同时又不失去处 理困难问题½力的语言。
那什么是“简单工½”呢?½然就是那些½每天½要干的。½需要一种可以很容易操½数 字,文本,文件和目½,计
算机和½络,特别是程序的语言。这种语言应该很容易运行外 部的程序并且扫描这些程序的输出获取感兴趣的东
西。而且它还应该很容易½把这些½感 兴趣的东西交给其它程序做特殊的处理。½然,这种语言还应该很容易在任
½现代的操½ 系统上可以移植地编译和运行。
Perl
做到了上述所有需求,甚至更多。
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
可 以增加½的
简历的分量。坚持读下去吧。
2.
这个版本有什么新东西
几乎全部½是新的。
即½是那些以前版本中的相½不错的地方(我们得说有相½不少这样的地方),我们也带 着一些目的做了大量的修
改。首先,我们希望增加本书对那些有着非计算机科学背景的人 士们更有吸引力。我们对读者已知的东西做出的假
设更少了。同时,我们把许多演示做得 更生动,以防那些已经有一定了解的朋友们看着看着就睡着了。
其次,我们希望展示
Perl
本身开发的最新进展。在这个问题上,我们丝毫不因表现我们 ½前的工½为耻,即½我
们展现给½的仍然是试验性的东西。½管
Perl
的核心部分已经 是久经考验的战士了,½是有些开发中的试验性部
分仍然偶尔会非常烫手。在这里我们要 老实告诉½,我们认为在线文档比我们在这里描述的东西更可靠。Perl 是蓝
领阶层的语言 ,所以我们不会因为把铁锹叫成铁铲而觉得脸红。
第三,我们希望½更½自如地往来与书中的各个章节,因此,我们把这个版本分裂成了更 小,更连贯的章节并且把
它们重新组织成有意义的部分。下面是新版本的布局:
第一部分,概述
迈出第一步总是最困难的部分。这一部分向½展现了
Perl
的基本概念,我们½可½地把 门槛放得更½一些。这一
部分不是完整的教程,只是一个快速入门,这样便可以满足所有 人的需要。½可以看看“离线文档”一节获取那些可
½更适合½的学习习惯的书。
第二部分,活生生的细节
这一部分包含对这门语言各个层次½象的深入的讨论,从数据类型,变量,正则表达式, 到子过程,模块和对象。
在这里½可以对这门语言如½工½有更½的了解,同时还可以得 到一些½的程序设计的经验。(如果½从来没有用
过带模式匹配的语言,那么我们就得对 ½另眼相看了。)
第三部分,½为技术的
Perl
½用
Perl
本身可以干很多事情,½这一部分带½到一个更高的境界。在这里½可以学到 如½将
Perl
和那些½的
计算机里的东西联系起来,从处理
Unicode,进程间通讯,以及多
线程,到编译,调用,调试和调谐
Perl,最后
评论