IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux | Open source  >

功能丰富的 Perl: Perl 书籍,第 1 部分

Higher-Order Perl 和 Randal Schwartz's Perls of Wisdom 内幕

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Teodor Zlatanov (tzz@bu.edu), 程序员, Gold Software Systems

2006 年 4 月 27 日

本文将介绍对任何 Perl 库都非常有用的两本书籍,一本是面向初学者的 Randal Schwartz's Perls of Wisdom,Randal Schwartz 著;另外一本更高级的是 Higher-Order Perl,Mark Jason Dominus 著。请阅读 Ted Zlatanov 的 Cultured Perl 专栏系列文章。

Mark Jason Dominus 所著的 Higher-Order Perl: Transforming Programs with Programs(在本文中简称为 HOP)和 Randal Schwartz 所著的 Randal Schwartz's Perls of Wisdom(在本文中简称为 RSPW)有一些相同之处。显然,它们都是有关 Perl 的,其作者在 Perl 社区中都非常出名。另外,这两本书都介绍了 Perl 中的一些有趣的技术,而不仅仅是对单个软件包进行讨论。

然而,这里有一些重要的区别。RSPW 是一些文章的集合,其中只有少数不是作者自己编写的。虽然这些文章都非常有趣,但是作者并没有出于一个单一目的来编写这些文章,因此这本书的风格比其他 Perl 书籍更类似于 The Perl Cookbook。另一方面,HOP 则肯定会成为经典;它从难度适当的 Perl 技术开始入手介绍,构建了最复杂的一些例子,这些技术已经慢慢转化成了我头脑中的知识。

有关本文中提到的所有书籍的链接,请参看 参考资料 一节的内容。

Higher-Order Perl

Mark Jason Dominus 在 Perl 社区中的名气非常大,他享有这种名气是理所应当的。HOP 中充分展示了他的技巧和无数令人兴奋的技术。

HOP 的第 1 章从几个简单的主题展开了讨论,例如递归和回调,同时给出了很好的例子。即使是不可重入函数这种非常冷僻的主题,也给予了足够的重视。第 2 章介绍了分配表的内容。这一章给出的配置例子非常好,但是应该介绍一下诸如 AppConfig 之类的模块,它可以自动完成很多工作。(尽管这个例子能实现 AppConfig 所不能实现的很多功能,但是大部分程序都不需要这些高级功能。)

第 3 章介绍的是与记忆有关的内容,这是一种用来记忆函数的技术,这样这些函数就不会运行两次了(代价是要花费一定的内存来存储函数的运行结果)。整章介绍了所有必要的基础知识:解释、例子、优点/缺点、记忆具有的典型问题等等。当这一章介绍到 lexical closures(3.5.2)时,大部分新入门的程序员可能都会把这本书丢在一边,当然他们可能会经过一段时间之后重新捡起这本书来仔细阅读。它不像 “Learning Perl” 那样例子都非常具体;要充分掌握本书剩余的部分,至少需要几年的编程经验。这一章还详细介绍了 Orcish Maneuver(3.10)以及不完全预测(semipredicate)问题(在阅读 HOP 之前我就已经知道有这个问题了,但是一直都不知道这个问题的名字,因此非常高兴能在这里看到详细的介绍)。

到现在为止,对于本书的总体印象是,它就像是一位计算机科学教授,又正好是一位 Perl 专家,正在从容不迫地与一个学生进行交谈。这与大部分 Perl 书籍都不同,后者更像是一个程序员在向另外一个程序员灌输知识。HOP 读起来更像是一本书,而不像是一系列 how-to 技巧。它非常适合我,但是可能并不适合那些不太有耐心的人。第 3 章是一个转折点 —— 如果您不喜欢也不理解其中的内容,那么 HOP 剩余的部分也就不会适合您的需要。

第 4 章开始构建一个迭代器框架,它是本书其余部分的基础。对于任何对这种特别酷的模式感兴趣的程序员来说,本章内容都是必须的,其中的例子从非常简单不断一步步地转向疯狂(当然这是夸奖的语气)。在前面每个例子的基础上,对迭代器上进行了过滤和转换,从而展示这种代码模式可以立即在真实的世界中使用。

第 5 章介绍了划分问题、递归函数到迭代函数的转换(我可以向您保证,这非常有趣)以及阶乘和斐波纳级数的实现。第 6 章是有关无限数据流的问题;我们不能结束这个数据流,它只会无限制地继续下去(开玩笑)。6.5 节介绍的是正则表达式字符串的生成问题,这是一个经常被问到的问题:“给定一个正则表达式,我们应该如何查找与之匹配的所有字符串呢?” 当然,在很多情况中这都是不可能的,但是在有些情况中,其结果集是有限的;在另外一些情况中,了解这个无限结果中开头的情况就是我们所要做的事情。

第 8 章是本书的核心,它实现了对其他函数进行操作的函数(高阶函数,这可能就是本书得名的由来)。这一章中每节的内容和每个例子对于本书剩余的内容来说都非常重要。这一章介绍并开发了通过 HOP 框架进行制定规则和分析的功能。我们的大脑在此时通常都会快冒烟了。休息一会儿,等充分放松之后再回来。第 9 章继续介绍这个奇妙的复杂例子,并实现了一个声明式绘图系统。

从我多年的编程经验来看,只有几本书全面地提高了我的编程技巧,这就是其中的一本。我可以马上想到的另外一本是 Unix Power Tools,这是 Stevens 撰写的有关 UNIX® 编程的一本书,当然还有 Knuth 撰写的几卷 The Art of Computer Programming。这些书不仅仅教会了我一门编程语言,而且还教会了我一门哲学,并让我从中受益非浅。我希望这样可以表达我对 Mark Jason Dominus 和 HOP 的赞誉和钦佩。HOP 会很长时间一直保留在我的书架上。

Randal Schwartz's Perls of Wisdom

RSPW 是一本非常有趣的书。相比之下,阅读 HOP 像是骑上一辆马力强劲的 Perl 摩托车,在计算机科学的殿堂中驰骋(动力、噪音十足,但是功能强劲),而 RSPW 则像是一辆行驶在乡间小路上的公共汽车。RSPW 中介绍的文章现在看来都有些过时了,主要是因为它们已经给新的 CPAN 模块和 Perl 本身的开发提供了灵感。Randal 的文笔非常好,这些文章全都简明扼要。这些文章通常都缺少一条信息:“如果您喜欢这种功能,请参看 CPAN 的模块 XYZ”。例如,第 4 章(CGI 编程)中介绍模板的文章应该提及 Template Toolkit,它实现的功能比本文中介绍的功能更多。

第 1 章是一些高级 Perl 教程的混合产物,值得一读。“对象简介” 教程的内容尤其不错。

第 2 章介绍了文本搜索和编辑的内容,这是 Perl 的传统强项。同样,这一章中的每篇文章也都值得一读,这些知识很可能会对您有用。本章内容适用于初学者和中级用户,因此可以很容易理解。

第 3、4、5 章大部分是关于 Web 开发的内容(HTML、XML、CGI、Webmaster 的 Toolkit)。这是本书的核心,也是 Randal 的主要兴趣。正如对一篇文章的评论所说的,它们都是为了解决真实的问题而编写的,本书的内容充分可以说明这一点。虽然代码有时候还比较粗糙,但是通常都非常有用,文章本身就是围绕代码构建的,在给出代码的同时进行了解释。

RSPW 与 HOP 的目标读者不同:它所面向的大部分读者是初学者和中级 Perl 程序员,他们正在寻找一些可实践的、立即可用的代码。唯一一个问题是本书没有对可以取代这些代码并节省读者工作的现有 CPAN 模块进行评论。除此之外,在其他任何方面,RSPW 都是不错的一本书,我热忱地将它与 The Perl CookbookProgramming Perl 一起推荐给您。

结束语

总而言之,HOP 和 RSPW 都是对库函数很好的补充 —— 不过它们介绍的库可能并不相同。

RSPW 对于初学者来说是一本不错的书,其中充满了有用的建议和详细的代码解释。它的可欣赏性很强(如果您不喜欢或不理解某篇文章,可以直接跳过!),在真实世界中可以马上就用上。

HOP 则是一本比较 “恐怖” 的专著,目标读者是那些具有相当计算机科学背景知识的高级 Perl 程序员。如果您在学校里上过一门算法课,并且非常喜欢这门课程,另外又非常喜欢编写 Perl 程序,那么您可能就会爱上 HOP。本书的品质、内容和代码都使得 HOP 令人难以忘却;它所提供的知识、智慧和直觉使它成为任何 Perl 程序员都应该全面理解并融会贯通的一本书。



参考资料

学习

获得产品和技术
  • CPAN(Comprehensive Perl Archive Network)是提供 Perl 模块、脚本、文档以及其他资料的主要站点。

  • 索取免费的 SEK for Linux,这有两张 DVD,包括最新的 IBM for Linux 试用版软件,包括 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere®。

  • 在您的下一个开发项目中采用 IBM 试用版软件,这可以从 developerWorks 上直接下载。



讨论


关于作者

作者照片

Teodor Zlatanov 于 1999 年毕业于波士顿大学计算机工程系,他获得了硕士学位。他做程序员这份工作从 1992 年就开始了,使用过 Perl、Java、C 和 C++。他的兴趣是开放源码项目、Perl、文本分析、3 层客户机/服务器数据库体系结构和 Unix 系统管理。欢迎通过 tzz-at-bu.edu 提供建议和指正。




对本文的评价










回页首


DB2、eServer、Lotus、Rational、Tivoli 和 WebSphere 是 IBM 公司在美国和/或其他国家的商标。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款