书评:《Perl 最佳实践》

作者:Paul Barry

书名:《Perl 最佳实践》

出版社:O'Reilly Media, Inc.

ISBN:0-596-00173-8

价格:$39.95

我们都做过,不是吗?我们都看过源代码——无论是我们自己的还是别人的——并问过那个古老的编程问题:“这段代码在做什么?”。当代码是用 Perl 编写时,上述问题可能会比需要的更频繁地被问到,因为 Perl——这个互联网上非常流行的万能胶——经常被用来生成难以理解的代码。Perl 社区几乎痴迷于让程序员以他们喜欢的任何方式工作,这使得问题更加严重。虽然 Perl 的座右铭“不止一种方法可以做到”通常可能是一种优势,但它也可能对大型项目和团队合作不利。如果每个团队成员的代码在风格、编码标准、布局和使用的习惯用法方面都自成一套,则尤其如此。通常,如果情况是这样,您最终会得到一个难以维护的 Perl 代码库。

Damian Conway 在正面解决这个问题时,如果说他不勇敢,那就太说不过去了。在他的最新著作《Perl 最佳实践》中,Damian 探讨了每个 Perl 程序员都应该密切关注的主题:编码标准、风格以及开发实践和行为。在 500 页左右的篇幅中,Conway 提出了他认为在使用 Perl 开发可维护代码时,应该遵循的一套一致的标准和风格。几乎神奇的是,这本书中共有 256 条准则,为各种能力的 Perl 程序员提供了帮助。

Conway 的勇敢之处在于他决定强调程序员在使用 Perl 编程时可能遇到的问题。通常,这些问题是 Perl 本身的问题,而不是程序员的问题,并且对 Conway 大多数读者所钟爱的编程语言进行了大量的批评。Conway 的优点在于,在批评之后,他会继续演示一种避免他所批评的技术或实践。请不要误会,Conway 的一些建议是有争议的。事实上,Conway 自己也强调,彻底禁止使用 unless 可能会引起一些人的不满。而且,还有许多其他准则会引起许多 Perl 程序员的惊讶和抱怨。例如,考虑第 10 章开头的“不要使用裸字文件句柄”准则,该准则警告不要编写如下代码:

open FILE, '<', $filename
    or croak "Can't open '$filename': $OS_ERROR";


如果您正在阅读本文,并且想知道上面的代码有什么问题,请不要绝望。从表面上看,这段代码没有什么太大的问题,因为它确实打开了一个文件并将其分配给一个文件句柄。然而,当系统增长到超过 20 行的临时脚本时,这段看似无辜的代码可能会导致问题。使用间接文件句柄重写上面的代码会更健壮、更可靠、更高效且更易于维护,如下所示:

open my $FILE, '<', $filename
    or croak "Can't open '$filename': $OS_ERROR";

Conway 详细介绍了为什么这样做很重要。在阅读了他的理由之后,即使我见过的所有其他 Perl 书籍(包括我自己的)都使用裸字文件句柄打开文件,也很难反驳或忽视所提出的建议。当然,正是在这个时候,Conway 的建议和解释变得非常宝贵。通过描述不遵守准则可能导致的糟糕情况,然后跟进一个稳健的解决方案,可以避免许多深夜或多天的调试会话。程序员的理智无疑是应该努力争取和保持的。很明显,Conway 撰写本书的主要目标之一是通过引导程序员远离 Perl 的许多陷阱,来保持您和其他阅读您代码的人的理智。

在阅读这本书的过程中,我了解了很多关于 Perl 5 当前存在的问题。我发现自己不断地重复着同样的祈祷:“哦,天哪,请让他们在 Perl 6 中修复这个问题。”《Perl 最佳实践》中的所有迹象都表明这些问题将被修复。然而,由于 Perl 5 将在相当长的一段时间内存在,Conway 的这本书现在具有真正的价值,而且随着时间的推移,这种价值只会增加。即使 Perl 6 真的到来了,大多数准则仍然有效,应该继续遵循。

值得关注的是本书开头感谢的长长的技术审阅者名单:其中包括 Perl 世界中一些最响亮的名字。因此,《Perl 最佳实践》不仅仅是 Conway 的最佳实践,而是 Conway 确定的核心圈子实际实践的最佳实践。

一个小小的抱怨是,我希望这些准则能够编号,以便于参考。不错的细节包括决定在整个文本中使用粗体等宽字体突出显示“好代码”,并使用普通等宽字体突出显示“坏代码”。本书还提供了大量指向 Web 上支持材料的参考链接。当笑话出现时,往往非常特别。

正如所有 Perl 程序员都知道的那样,Perl 的内容非常丰富,并且有很多 Perl 需要学习。除了涵盖基本材料外,Conway 的书还讨论了我从未在其他任何地方见过的 Perl 的一些阴暗角落(功能?)。通过阅读《Perl 最佳实践》,即使您决定不采纳提供给您的准则,您也会成为一名更好的 Perl 程序员。从我个人的角度来看,我希望看到一个 CPAN 图标,表明提交的模块是否符合 Conway 的 256 条准则。我希望使用共享模块构建我未来的应用程序,我知道我会很乐意阅读、修改和使用这些模块。

现在,我要去更新我的 Perl 教程,使其符合 Conway 的准则。我也期待 Perl 6 的第一个正式版本的发布。Damian Conway 的《Perl 最佳实践》是必备之作。

Paul Barry 在爱尔兰卡洛理工学院任教。他是两本使用 Perl 的教科书的作者。可以通过 paul.barry@itcarlow.ie 与他联系。

加载 Disqus 评论