【在主画面加入捷径】
       
【选择语系】
繁中 简中

技术杂谈:Modern Perl 2016 年版回顾

【赞助商连结】

    随着 Python、Ruby、Groovy 等脚本语言的掘起,Perl 的影响力不如以往;近年来 Perl 相关书籍数量也较先前减少,不过,我们很庆辛,在 2016 年,仍然有新的 Perl 相关图书,就是本文将介绍的 chromatic 的 Modern Perl, 4th edition,这篇文章,将会带着各位浏览一次这本书籍。

    首先,虽然这本书大部分内容在讨论 Perl 的语法,但是这本书的程序代码相对简短精实,对于一些新的用法,有时候不会特别去说明,而会直接使用;而且,这本书不会解释程序设计的基本概念,比如变量、条件式、循环等,而会直接讨论进阶的 Perl 语法;对于初学者,可能会觉得本书的叙述相对晦涩难读。如果是 Perl 的初学者,希望能够按部就班的学习,还是比较推荐 Perl 学习手册 (Learning Perl) 和 Perl 进阶手册 (Intermediate Perl) 这两本经典教程。

    本书分为以下数个部分:

    • The Perl Philosophy
    • Perl and Its Community
    • The Perl Language
    • Operators
    • Functions
    • Regular Expression and Matching
    • Objects
    • Style and Efficacy
    • Managing Real Programs
    • Perl Beyond Syntax
    • What to Avoid
    • Next Steps with Perl

    本书一开始就教我们如们用 perldoc 工具和 CPAN 网站查文件,对于程序设计师来说,学会利用程序的文件自我学习,是相当重要的。接下来谈到 Perl 的表现力和语境,对于写过一阵子 Perl 的程序设计师,会相当有感觉。本段最后则讨论到 Perl 的默认变量。之后,讨论到 Perl 相关资源。本段的重心在 CPAN 的使用,藉由这些第三方函式库,大大地增加 Perl 的功能。另外,虽然本书没提到 plenv 项目,笔者大力推荐这套 Perl 版本管理软件。

    接下来的章节,提到 Perl 的语法。除了基本的语法介绍外,本书也介绍一些相对进阶的议题,像是 UTF-8 等。不过,本段行文节奏相对快速,程序代码片段也相对简短,对于初学者来说,可能会吃不消;把这个段落当成是复习语法,可能比较好。然后,提到操作子,这个段落内容较少,应该很快就能读完。在函数的段落中,除了基本的函数相关语法,也提到一些较进阶的主题,像是 function signature、Carp 模块、tail call、anonymous function 等。如果读者对 Perl 的 functional programming 有兴趣,可另外阅读 Higher-Order Perl,里面有许多相关的主题。在 regex 的段落中,原作者以较快的步调将 regex 讲解一次,另外,在最后面提到 smart matching 的议题。

    在物件的段落,原作者未对原本的 Perl 物件做太多的介绍,而直接切入 Moose 这套新的 Perl 物件系统;但是,笔者仍建议稍微将原来的 Perl 物件有一些基本的了解后,再切入 Moose,比较会知道那些部分是 Moose 的新语法,而不至于搞混。这本书对 Moose 的介绍相当完整,可以先将本段落看完后,再回头看 Moose 的官方文件,会比较容易了解。另外,在实务上,如果只会用到基本的面向对象语法,可以用 Moo 这个 Moose 兼容的函式库取代原有的 Moose,其文件较小,安装较快速。

    接下来的段落,原作者提到一些以 Perl 开发软件的建议,其实不仅仅适用 Perl,而是一些通则,可以细细品尝。然后,提到例外处理,由于 Perl 原来的相关方案较原始,故作者提供一些替代性的方案。最后则提到一些实用的 pragmas,可视需求加入自己的程序代码中。再来,谈到实务上会碰到的一些状况,像是撰写测试程序、警告讯息处理、文件 I/O 处理等,以及一些进阶的议题,包括撰写模块、程序代码生成、taint 模式等。本段落的主题相当值得一看。之后,提到一些相对进阶的写法,这些不是必需的,但对学习 Perl 有相当的帮助。之后提到一些应该避免的写法,可以读过一次,并改掉这些习惯。最后的段落,简单提到一些 Perl 的模块,有兴趣的程序设计师,可再自行挖掘更多函式库和框架的用法。

    虽然笔者在近年来较少使用 Perl 做为开发用语言,然而,笔者仍然十分高兴有这本书的问世,让 Perl 语言也能与时俱进,而避开使用一些老式的用法。