内容


功能丰富的 Perl

三本必备的 Perl 书籍

Perl 6 Essentials、Perl Cookbook 和 Perl Template Toolkit

系列内容:

此内容是该系列 # 部分中的第 # 部分: 功能丰富的 Perl

敬请期待该系列的后续内容。

此内容是该系列的一部分:功能丰富的 Perl

敬请期待该系列的后续内容。

在本期文章中我将要评论的三本书都是来自于 O'Reilly & Associates,但您将会看到,它们很不相同。不过,对 Perl 编程的具体方面来说,它们都是优秀的指导资料,您将乐于收藏它们。

是 O'Reilly & Associates 为我友好地提供了这里所评论的书籍的拷贝,为此我要向 O'Reilly & Associates 表示感谢。

Perl 6 Essentials


本书是对未来的描述。也就是推测 Perl 的未来。 Perl 6 Essentials是对新的 Perl 6 的未来预测,并且,为了跟上 Perl 开发的步伐,作者保证每年都会进行修订。可见,作者将全部身心都投入到了 Perl 6 的开发中。这本书主要是对 Perl 6 文化、Perl 6 语言和 Perl 6 内部机制的介绍。它用了不到 200 页就成功地完成了所有这三个层次的内容,体现了作者的熟练程度。

本书最开始是对 Perl 6 的一个概述,给出了足够的背景资料,以使新 Perl 程序员了解他们所需要知道的所有最新知识,然后,作为补充,详细说明了 Perl 6 开发工作如何进行、如何评价最新的版本、甚至如何实践 Perl 6 的开发者发行版本。

然后,在第 4 章,作者为读者准备的是对 Perl 6 语法的讨论,全面介绍了 Perl 基本概念和规则。

第 4 章是正式内容的开始。它是对 Perl 中可期待内容的完整总结,如果您不得不从本书中只选择一章,那么就是这一章。每个 Perl 程序员都应该去阅读这一章,不只是为了了解 Perl 6 的诱人特性,还会说出“哎呀,我从来没想到过那一点”,因为 Perl 6 引入的视点对 Perl 5 开发者来说经常是新的。第 4 章惟一的不足之处在于,它不是对初学者准备的。具体内容特别简明有趣,而且它假定读者具备 Perl 5 术语和背景的知识。

由于曾经使用支持关联符号属性(properties)的 Emacs Lisp 进行过编程,所以我为 Perl 6 属性而感到兴奋,它可以做极其类似的事情。属性必然会为 Perl 编程带来一个全新的“侧面的(sideways)”途径。我之所以称之为“侧面的”,是因为它们用“另外”的方法来表达含义,不需要使程序的逻辑变得复杂,也不需要面向对象的方法。篇幅所限,很多其他的特性我不能提及。在阅读到 junctions、currying 以及 Perl 6 将要具备的所有其他特性时,我感觉就像是小孩子走进了糖果店。

第 4 章比较详细地解释了 Perl 6 的语法,我当然欣赏这一点。Perl 6 语法是一个肯定会让程序员迷惑、烦恼而又会产生灵感的特性。它们和 Perl 5 的语法有着巨大的差异;实际上,就其灵活性而言它们更像是 Parse::RecDescent 语法。如果您想要理解 Perl 6 语法,就不得不去深入学习您可能曾经想过要学的 lexing 和 parsing。

第 4 章结束后,第 5 章开始研究 Parrot 的内部机制。Parrot 是运行 Perl 6 代码的引擎,因此它对 Perl 6 编程来说非常重要。作者解释并论证了他们为 Perl 6 所做出的设计选择。Parrot 的内部机制显然不适合编程的初学者学习。熟悉计算机体系结构、编译器内部机制、甚至是 Java? 语言等其他语言,有助于深入理解这些内容。对我来说,第 5 章是令人着迷的,但是我的观点可能会因为我个人的经验而有失偏颇。如果您是那种热衷于多方法分派和迭代器实现的程序员,那么这一章就是为您准备的。如果您不是,那么此时您可能只是会略读一下第 5 章和本书其余的部分,以后再回来重新阅读这些内容,或者是本书以后版本中(保证一年内会得到更新)相应的内容。

第 6 章回答了“说了这么多,有什么可看的吗?”这个古老的问题。介绍了 Parrot 汇编语言。类似于第 5 章,第 6 章假定读者具有计算机体系结构知识,并且至少有一些汇编语言编程的经验。如果没有那些知识和经验,第 6 章可能难以理解。

如果说第 4 章是 Perl 6 的驾驶手册,第 6 章就是引擎部分列表。第 6 章中并没有展示第 4 章中的大部分特性,但是展示了其实现方法。阅读完这一章后,我认识到,Perl 6 的语法和特性比以前好了很多。例如,在第 6 章中对栈和寄存器结构的解释要联系到第 4 章中对变量作用域的解释。

此外,第 6 章有一些关于如何将引擎部分加入到一辆全新汽车的介绍,也就是说语言的选择不仅仅局限于 Perl 6。我发现,有趣的是,用疯狂的计算机科学教授(crazy-computer-science-professor)的思路来想像如何在 Parrot 汇编中表达 Java 或 Lisp 代码。

在第 6 章的有趣内容之后,第 7 章描述了 IMCC(中间码编译器,Intermediate Code Compiler)如何可以简化 Parrot 汇编编程中的大部分工作。IMCC 使事情变得更简单,但它并没有免去理解 Parrot 内部工作原理的负担。IMCC 还是 Parrot 特性的一个极好界面。

第 5 章到第 7 章显然不是容易读懂的,但它们非常有价值。我希望在 Perl 6 Essentials一书的下一版中看到更多的那些话题。

总体来说, Perl 6 Essentials是一本好书。我建议那些初级的程序员等待更容易理解的关于 Perl 6 的书的面世,因为这本书将计算机科学与技术多年的发展过程浓缩到了 200 页之中。对中级的和高级的 Perl 程序员来说, Perl 6 Essentials是指引您走向 Perl 未来的必备路线图。

Perl Cookbook,第二版


Perl Cookbook的第二版在第一版之后五年问世,经过了深入的修订,添加了很多新内容。它回答了程序员会问到的关于编写 Perl 的几乎所有问题,还有例子和解释。作者是 Tom Christiansen 和 Nathan Torkington,对第一版和第二版的贡献者列表是 Perl 社区的名人录。

Perl Cookbook第二版中关于 Unicode 的资料是对本书第一版的可喜的补充,而且要比 Programming Perl,第三版中整个 Unicode 一章更为完整和实用。毫无疑问,这是因为在编写旧版本的时候,很多 Perl 5 Unicode 特性的时机还没有成熟。 Perl Cookbook中对 Unicode 的复盖贯穿于全书始终,其中第 1 章(字符串)和第 8 章(文件内容)中涉及到了最新的 Unicode 内容。

尽管有个别的地方被更新或重写,但大部分章节的内容几乎没有改变。换句话说,先前版本中对问题话题的组织并没有随时间而改变,但其答案发生了变化。

第 14 章讨论了数据库的访问,已经被扩展,但没有涉及 Class::DBI 模块。对每个使用 Perl DBI 的人来说, Class::DBI 都是一个应该考虑的可行选项。它在过程化的 DBI 层之上提供了一个完全面向对象的接口。由于 DBI 的局限和关系型数据库的广泛应用, Class::DBI 在这一抽象中没有获得完全成功,但是它对 90% 的实际项目来说是足够的。不过,非常欢迎在 Perl 中引入额外的数据库接口。

第 18 章涵盖了在第一版中可以找到的 Internet 服务,有了关于邮件附件、LDAP、XML-RPC 和 SOAP 访问的新资料。这些都是很好的技术,它们为在上个世纪(20 世纪)就已经根深蒂固的一章带来了一丝新鲜空气。不幸的是,没有提及 SSH 自动操作,也没有提及 IMAP 协议。

第 20 章是关于 Web 自动操作,包含了大量的新资料。无论是客户端还是服务器端,对 Web 程序员来说它都是一个很好的参考资料。

第 21 章( mod_perl )和第 22 章(XML)是第二版中全新的两章。这两章我都非常喜欢,尤其是第 22 章解释了可以非常方便地解析 XML 的各种可用选项。任何对其中一章的话题感兴趣的人,都应该去阅读它们,尤其是那些简明而直接的有用的例子。

现在吹毛求疵地提出一些问题,尽管在这部 900 多页的书中几乎没有问题。

我希望第 3 章直接在介绍中提到 POSIX strftime() 函数,而不是在方法 3.1 和 3.8 中作为可选方法提到。这样就会是一个严谨的章节。

我感到惊奇的是,竟然没有提到方法 4.16 中的 Schwartzian 转换的名称,尽管它很容易识别。

我应该指出,方法 5.9,也就是“倒置一个哈希表”,也可以用我的 Tie::Hash::TwoWay CPAN 模块完成,该模块所做的要比方法中展示的多很多(假如要我自己说!)。

如果方法标识出支持它们的 Perl 版本,将是很好的。还有很多人安装的是 5.005 和 5.6.1 版本的 Perl,出于常见的原因,这些不会很快得到升级。

第 15 章应该提及 CPAN 的 AppConfig 模块,它给出了一个我认为与标准的 Perl Getopt 模块不同的而且更好的命令行选项接口。例如,与 Getopt 不同, AppConfig 是面向对象的;它还支持使用与命令行中可用的相同的语法去读取配置文件。

读完 Perl Cookbook的第二版后,我感觉已经为应对当今环境中的 Perl 编程的挑战作好了准备。第一版由于印刷以后出现的技术而导致现在看来有些地方存在不足,第二版再次为所有 Perl 程序员(从初学者到高级程序员)提供了一个可靠的基础。我向大家强烈推荐 Perl Cookbook,甚至是那些已经拥有第一版的人。

Perl Template Toolkit


Perl Template Toolkit(TT)是我所喜爱的 Web 开发工具之一。我为这本关于 TT 的书而感到激动,因为它是由 TT 的作者编写的。

这本 TT 书籍的规划类似于经典的“Learning Perl”的规划,首先是关于基本概念的一个简单介绍性章节,接下来是较长的解释性章节。第 1 章到第 6 章遵循这一策略;TT 语言、指令、过滤器和插件都解释得很详细,令人满意。即使我多年来就是一个 TT 用户,我还是发现几乎在每一页上都会找到新的资料,不管是在函数中还是在给出的例子中。阅读 TT 的在线文档是实用的,但是,对于学习如何全面彻底地使用 TT,TT 书籍显然是更好的途径。

第 1 章到第 6 章适合初学者,也同样适合高级 Perl 程序员。TT 语言是独特的,但是任何人在阅读完 TT 书后,都将发现它很简单。

不过,第 7 章到第 12 章就高级得多了。至少,读者应该熟悉 Perl 面向对象编程(OOP)和 HTML 编程。第 9 章(关于数据库访问)和第 10 章(关于 XML)更容易理解,但是分别具备一些实际的使用数据库和 XML 的经验会非常有帮助。这不是 TT 书籍作者的过错;数据库和 XML 是深深植根于计算机科学与工程中的复杂话题。

在第 3 章中讨论的“视图(view)”特性让我感到兴奋,但是让我疑惑的是为什么如此有限。要为哈希表、数组和标量都提供视图多好呀,为什么不呢?视图的声明应该基于类名,所以类“ A::Beta ”的一个对象可以有与“ A::Gamma ”不同的动态视图,而不需要程序员付出额外的工作。这只是我惟一的一个重要问题,在这本 TT 书籍中几乎找不到任何瑕疵。

这本 TT 书籍的作者非常尽力地去保持 TT 只是一个描述工具,没有执行逻辑。实际上,有些情况下(比如 mod_perl 示例),完整的自包含的 TT 模板本身就已经不错,稍微打破一些规则可以带来更大的益处。应该高度评价本书的作者对 TT 的意图的坚持,不过,要认识到没有什么规则是绝对的,尤其是在 mod_perl 下进行 Web 编程时。

总体来说,这本 TT 书籍详细地、令人着迷地介绍了 Perl Template Toolkit。所有对 Web 开发感兴趣的人,不管用不用 mod_perl ,都必须至少要从与其他模板系统进行比较的观点出发来读一下这本 TT 书籍。出于很多其他目的,TT 也是实用的,书中非常好地对它们进行了解释,因此我真心地向所有 Perl 程序员(从初学者到高级程序员)推荐这本 TT 书籍。

回顾


在这里我所评论的三本书都很好。 Perl 6 Essentials一书的期望读者并不是整个 Perl 社区,不过包括了所有对 Perl 6 感兴趣的人。拥有中级到高级经验的读者将肯定会发现这本书更为实用。还有一点很重要,第一版将在一年内“过期”,由紧跟 Perl 6 开发的新版本所取代。不过,这是一本写得很好的书,有很多关于 Perl 6 的资料。第 4 章特别好。

Perl Cookbook 第二版对所有的 Perl 程序员来说都是一个极好的参考资料。我无保留地推荐它,而且我保证多年内它都是实用的。

Perl Template Toolkit是一本迷人的书,非常详尽地介绍了 Template Toolkit。我向所有的 Perl 程序员推荐它,我想初学者程序员将会发现前 6 章更有用。与使用源代码版本控制器及吃巧克力一样,使用模板进行编程很容易上瘾。要是上钩了可不要怪我!


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=49599
ArticleTitle=功能丰富的 Perl: 三本必备的 Perl 书籍
publish-date=05012004