Core Perl:书评

作者:Paul Barry

标题: Core Perl作者: Reuven M. Lerner出版社: Prentice-Hall, Inc.URL: www.coreperl.comISBN: 0-13-035181-4价格: US$44.99

每一位 Linux Journal 的读者可能都很熟悉 Reuven Lerner 的 “At The Forge” 专栏,他在专栏中每月都会介绍 Web 编程技术。如果您是 Perl 的粉丝(像我一样),您可能会为 Reuven 最近转向 Java 作为他构建讨论的编程语言而感到惋惜。LJ 中每月一次的 Perl 专题已经消失一段时间了,Java 似乎 无处不在。让我坚持下去的是 Reuven 的标准签名,他戏弄说他的书 Core Perl 即将由 Prentice-Hall 出版。这本书终于在 2002 年 1 月出版了,而且,由于我一直在寻找一本好的全面的 Perl 教材来推荐给我的学生,我非常渴望看看这本书。

Core Perl 是 Prentice-Hall PTR Core Series 的一部分,该系列是一套面向专业程序员的编程书籍。Core Series 与 Horstmann & Cornell 的 Core Java 联系最为紧密。虽然主要是一个以 Java 为中心的系列,但 Core Series 的少量书籍涵盖了其他编程技术,即 Python、C++、PHP 和现在的 Perl。Reuven 的书被标记为 Perl 严肃开发者指南,其定位不是为新手程序员编写的书籍,而是为已经从事 Perl 编程的程序员或希望学习 Perl 的其他语言程序员编写的书籍。

总的来说,Reuven 在满足这两类受众的需求方面做得相当不错。在 565 页的篇幅中,Core Perl 包括大约 18 章,每章专门介绍一个特定的 Perl 主题。在前言中,介绍了本书的结构,以及本书 涵盖的 Perl 主题列表。这些主题将被认为是高级 Perl 技术,它们包括 GUI 开发(使用 Tk)、链接到 C/C++、使用 XS、编译和线程编程。如果您对这些 Perl 主题感兴趣,您将需要到其他地方寻找。本书的其余部分可以粗略地分为三个主要部分(尽管在文本中没有这样标识):Perl 作为一种编程语言(第 1 章到第 10 章,以及第 13 章),使用数据库(第 11 章到第 12 章)和使用 Web(第 14 章到第 18 章)。

在第 1 章(“什么是 Perl?”)中描述了 Perl 是什么、不是什么以及如何获取它之后,事情在第 2 章(“入门”)中真正开始,读者被介绍到 Perl 的基本变量构建块——标量、数组、列表、哈希和引用。由于这是一本面向从业程序员的书籍,我很惊讶地看到对 HEX 和 OCTAL 数字是什么以及它们如何工作的描述。难道会有程序员不知道 HEX 数字是什么吗?!更有趣(也更重要)的是本章末尾对 Perl 中作用域工作方式的介绍,其中描述了全局变量和词法变量之间的差异。在第 3 章(“扩展您的 Perl 词汇”)中,继续介绍了该语言的语法。这些材料包括基本 I/O、条件构造、运算符和循环。还描述了许多更常用的内置函数。fork 和 eval 函数在本章末尾进行了简要描述。我不太喜欢随附的描述,并且希望对这些重要函数进行一些额外的、扩展的讨论和回顾。

第 4 章(“子例程”)完全是关于子例程的。关于本章末尾信号的讨论本可以从提供 Perl 支持和不支持的信号列表而受益。但是,总的来说,这些材料很好。第 5 章(“文本模式”)是关于 Perl 的正则表达式、模式匹配技术的良好教程。第 6 章(“模块”)继续讨论 Perl 程序的机制,描述了使用 package 命令创建命名空间。还讨论了创建独立模块文件所需的步骤。本章后半部分简要介绍了 CPAN 存储库中可用于 Perl 的一些第三方附加模块。还介绍了使用 POD 创建文档。在关于模块的章节之后,第 7 章(“对象”)讨论了将 Perl 用作面向对象编程技术。虽然介绍的材料很好,但我发现示例有些简化。如果我从另一种 OO 语言转向 Perl 并阅读本书,我会问自己“就这些吗?”。本章也太短了,但其中的内容很好。

Reuven 在下一章“绑定”中在某种程度上挽回了自己。介绍了 tie 和 untie 子例程,以及如何将不同类型的变量绑定到标量、哈希、DBM 文件和数组的非常出色的描述。我一直有点难以理解 Perl 中的绑定,但是当我完成本章时,我对自己说“现在我明白了!”。

第 9 章(“使用文件”)回到使用 Perl 执行 I/O 的主题。作为本书中最大的章节之一,本材料详细介绍了如何在 Perl 程序中处理文件、目录和底层操作系统。正如预期的那样,这些材料主要是从使用 UNIX 或 Linux 的 Perl 程序员的角度呈现的。第 10 章(“网络和进程间通信”)是另一章大章节。这里描述了编程匿名和命名管道所需的技术,以及使用 Socket API 进行网络编程的介绍。在本章的前半部分,介绍了一小部分客户端和一个服务器。对这些材料的讨论被一些非常糟糕的正在发生的事情的描述所破坏。再加上程序代码中一些不正确的注释,结果是对这些材料的报道令人失望。本章的后半部分描述了可用于 Perl 的 Internet 附加模块的集合。编程的示例协议包括 FTP、Telnet、SMTP(电子邮件)和 HTTP(Web)。还简要描述了 HTML 解析。

在上一章令人失望之后,Reuven 再次用另一章精彩的章节弥补了自己。第 11 章(“关系数据库”)是对数据库和 SQL 的最佳介绍,您可能会在一本这样的书中找到。我真的很喜欢这些材料,即使我倾向于发现数据库这个主题非常乏味。本章还介绍了数据库的标准 Perl API (DBI)。请注意,Reuven 使用的 RDBMS 是开源的 PostgreSQL。第 12 章(“构建数据库应用程序”)扩展了前一章的内容,并使用 Perl、DBI 和 PostgreSQL 构建了一个完整的数据库应用程序。其他材料涵盖了调试 DBI。同样,我发现本章中的材料非常好且呈现得很好。

第 13 章(“维护和安全”)充当本书数据库部分和 Web 部分之间的分隔符,它概述了 Perl 在程序员处理警告和错误时提供的帮助。还涵盖了调试(命令行 图形化)、基准测试和污点(Perl 的偏执模式)。在我看来,仅提供两页关于污点的描述是不够的(尤其是在本书的下一章介绍了 CGI 的情况下)。

本书的最后四章(以及数据库章节)为从业 Perl 程序员提供了最多的内容。在快速介绍了 HTTP、HTML 和 URL 之后,第 14 章(“CGI 编程”)简要介绍了 Perl 对 CGI 的支持。Apache 是本章中介绍的 CGI 的宿主 Web 服务器。我希望在本章(以及后续章节)中看到一些屏幕截图,因为我相信它们会增强对所介绍的 CGI 程序的讨论和解释。第 15 章(“高级 CGI 编程”)扩展了第 14 章的介绍,并介绍了更完整的 CGI 示例程序。这些包括设置注册系统、编程 cookie、动态创建图像以及使用 HTML 模板技术的基础知识。这些示例很好,但是,一些屏幕截图会使它们更好。

第 16 章(“Web/数据库应用程序”)将第 11 章和第 12 章的数据库技术与第 14 章和第 15 章的 CGI 技术相结合。这是另一章精彩的章节(尽管它也因缺少屏幕截图而受到影响),并且包含了一些相当长且复杂的编程示例。这些示例包括处理存储在 Web 托管数据库中的股票数据、基于 Web 的电子明信片发送系统以及将 Web 托管数据库与 cookie 相结合的个性化技术。

本书的最后两章面向重量级 Web 程序员。第 17 章(“mod_perl”)讨论了流行的 Perl Apache 附加模块。涵盖了 mod_perl 模块的安装、配置和使用。介绍了三个简单的处理程序,以演示基本机制,然后本章的后半部分介绍了一系列标准的 mod_perl 模块(包括用于将 mod_perl 处理程序连接到后端数据库的 Apache::DBI)。本书的最后一章,标题为“Mason”,更详细地介绍了 HTML 模板技术。这是对 HTML::Mason 的一个很好的入门描述。我不太做动态网页开发;但是,如果您每天花费任何时间使用 HTML 和 Perl 创建网站,那么这项技术看起来是您真正应该投入的东西。唯一的附录(参考书目和推荐阅读)介绍了 Reuven 的推荐阅读列表。这是一个很好的小型集合,其中包含该领域一些最重要的著作。一个详细的 33 页索引完成了本书。

我可以给任何阅读 Core Perl 的程序员的最佳建议是,在您的计算机和 Perl 的帮助下通读本书。要从任何编程书籍中获得最大收益,您需要尝试这些示例来巩固您对所讨论主题的理解。对于 Core Perl 尤其如此。并不是说对正在发生的事情的解释很差,而是很少有场合显示示例程序生成的输出,因此您需要通过 Perl 解释器运行代码片段才能真正了解正在发生的事情。值得庆幸的是,本书的网站包含了本书中使用的所有源代码,作为一个可下载的压缩 tar 存档。

尽管在过去的几年里我一直将 Perl 作为我的主要编程语言,并且尽管我读过的 Perl 书籍比我愿意提及的还要多,但我仍然惊喜地发现 Core Perl 教会了我一些关于该语言的新知识。我们都知道 Reuven 了解他的 Perl。在 Core Perl 中,他证明了这一点。我也很高兴看到 Reuven 描述了 Perl 的 5.6.x 版本,这意味着他对该语言的描述是最新的。

除了在后面的章节中添加一些屏幕截图外,我还建议在本书的未来版本中添加一些内容。最好有一些额外的附录,足够详细地介绍本书的一些核心技术的获取、安装和配置,例如 PostgreSQL、Apache、mod_perl 和 HTML::Mason。此外,在第 17 章(“mod_perl”)中,看到更大的 httpd.conf 摘录会更有用,而不是散布在本章各处的小片段集合。

我还有一些抱怨。

尽管写作风格是非正式的(并且非常像熟悉的“At The Forge”专栏),但我还是被 Reuven 对前向引用的使用和严重依赖所震惊。当然,一定数量的这些是不可避免的,但是有很多。这在早期的章节中尤其明显。对于已经熟悉 Perl 的读者来说,这种风格不是一个大问题。但是,对于来自另一种编程背景的读者来说,不断地向前跳到文本中以阅读本书前面使用但直到后面才详细讨论的功能可能会变得非常累人。这可能导致的问题的一个特别糟糕的例子是在第 107 页讨论僵尸进程时。读者被引导到第 4.7.4 节以了解更多详细信息。第 4.7.4 节 返回 到第 107 页,然后将读者引导到 perlipc 在线文档。

我也对在文本中发现的错误数量感到惊讶(并且有点失望)。恕我直言,Core Perl 的第一版充满了错误。读完这本书后,我向 Reuven 发送了近 70 个查询错误。有些是微不足道的错别字(或排版错误),有些是编码错误,还有一些是解释方面的问题。值得赞扬的是,Reuven 在本书的网站上有一个勘误表,并且他在勘误表页面上包含了对我发现的错误以及其他一些错误的描述。此外,Reuven 告诉我,在第一版中发现的任何错误都将在后续版本中由 Prentice-Hall 修复。如果您确实购买了第一版,请打印出勘误表并在阅读 Core Perl 时将其放在手边。请注意,尽管存在这些问题,但我确实打算向我的学生推荐 Core Perl。这些材料很好,即使我对它的呈现方式有些问题。

Paul Barry 在爱尔兰卡洛理工学院任教。他是 使用 Perl 进行网络编程 的作者,由 John Wiley & Sons Limited 出版。

电子邮件:paul.barry@itcarlow.ie

加载 Disqus 评论