设为首页 收藏本站
查看: 577|回复: 0

[经验分享] Perl 6 Essentials、Perl Cookbook 和 Perl Template Toolkit(Reship)

[复制链接]

尚未签到

发表于 2015-12-26 08:08:01 | 显示全部楼层 |阅读模式
  级别: 初级
  Teodor Zlatanov
程序员, Gold Software Systems
2004 年 5 月
在本期文章中,Ted 对三本 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 章更有用。与使用源代码版本控制器及吃巧克力一样,使用模板进行编程很容易上瘾。要是上钩了可不要怪我!

  参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
  • Perl 6 Essentials (O'Reilly & Associates, 2003)涵盖的不只是 Perl 语法的发展,还有 Parrot,它是作为 Perl 6 设计策略的一部分而开发的语言无关的解释器。
  • Perl Cookbook,第二版 (O'Reilly & Associates, 2003)为所有使用 Perl 编程的人总结了问题、方案和实际例子。
  • Perl Template Toolkit (O'Reilly & Associates, 2003)指引您完成安装、配置、使用和扩展 Template Toolkit 的整个过程。同时查看 Template Toolkit 的主页。
  • 查看主要的 O'Reilly & AssociatesWeb 站点以获得更多 O'Reilly 书名。
  • 通过 Parrot 的主页(现在是 Parrot 和 Perl 6 的主页)及时了解 Perl 6 的新闻;及时了解 Perl 6 每周更新。
  • Bernd Dulfer 的 Perl6 快速参考是无价的 Perl 6 参考资料。
  • 您还将会对 Larry Wall's plans for Perl 6 regular expressions 及 Allison Randall 和 Damian Conway 的 clarification of Larry Wall's article感兴趣。同时查看 Damian Conway 的 examples of Perl 6 regular expressions in action。
  • 用于将 Perl 6 正则表达式语法包括到 Perl 5 中的 Perl6::Rules 模块可以自 CPAN 获得。
  • Parse::RecDescent,Ted 的 Tie::Hash::TwoWay 和 Regexp::Common module也在 CPAN 上。在 Ted 的 Cultured Perl专栏中阅读另一关于 Parse::RecDescent 的文章, 功能丰富的 Perl:编写说英语的 Perl 程序(developerWorks,2000 年 8 月)。他在 功能丰富的 Perl:绑定的变量(developerWorks,2003 年 1 月)中讨论了 Tie::Hash::TwoWay。
  • 阅读 Cultured Perl 系列中 Ted 的其他 Perl 文章。
  • 本文让您有了一种要买书的冲动吗? 可爱的 Python:更新您的 Python 读物列表(developerWorks,2002 年 5 月)给出了 David Mertz 对 Python 出版物的挑选和介绍。
  • 在 developerWorks Linux 专区可以找到更多为 Linux 开发者准备的参考资料。
  • 购买 Developer Bookstore Linux 区 打折出售的 Linux 书籍。
  • 通过 developerWorks Subscription 使用最新的 IBM 工具和中间件来开发和测试您的 Linux 应用程序:您可以自 WebSphere、DB2、Lotus、Rational、和 Tivoli 得到 IBM 软件,以及一个可以在 12 个月内使用这些软件的许可,所有的花费都比您想像的要低。
  • 自 developerWorks 的 为您的 Linux 应用开发加油提速 专区下载可以运行于 Linux 之上的经过挑选的 developerWorks Subscription 产品免费测试版本,包括 WebSphere Studio Site Developer、WebSphere SDK for Web services、WebSphere Application Server、DB2 Universal Database Personal Developers Edition、Tivoli Access Manager 和 Lotus Domino Server。要更快速地开始上手,请参阅针对各个产品的 how-to 文章和技术支持。
  
关于作者
Teodor Zlatanov 于 1999 年从美国波士顿大学(Boston University)毕业,获得计算机工程硕士学位。他从 1992 年起就从事程序员的工作,使用过 Perl、Java、C 和 C++。他的兴趣是文本解析、三层客户机-服务器数据库体系结构、UNIX 系统管理、CORBA 和项目管理方面的开放源码工作。可以通过 tzz@bu.edu 与 Teodor 联系。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156384-1-1.html 上篇帖子: 使用perl统计单词(字母) 下篇帖子: Perl函数pack/unpack(二进制读写)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表