重拾 Perl

最近,我开始重新学习 Perl,尝试用 Perl 来完成日常的开发程序。

原因是前几天听第 27 期内核恐慌时,主持人提到了 Perl 6。然后吴涛说起 Perl 时,感情很复杂。我当时心想,我对 Perl 的感情也很复杂咯。首先是对今天的程序员来说,Perl 太原始了,与 Python 和 Ruby 等语言相比,更显古老。回想起来,自从我学习了这两种语言后,我就再没有正儿八经用 Perl 写过程序。而我真正有了属于自己的电脑,是在 2007 年,那个时候我正好开始学习 Python,之后就没有碰过 Perl。

而另一方面,Perl 又是我的启蒙导师。具体的科目不好形容,与 UNIX/Linux、开源等世界有关。在接触 Perl 之前,我对编程,还停留在 BASIC 语言、C/C++ 语言、Pascal 语言上面,对于脚本语言,我的理解只是 .bat。在当时的教科书上,获得的结论是编译型语言比解释型语言在执行上各种优秀,解释型语言只有在学习时才有优势。UNIX 世界繁荣的脚本语言与著名的 KISS 原则,我则一概不知。

记得我大概在高中的时候买过一本小册子,第一次让我接触了 Perl。小册子的内容是 FORTRAN、Pascal、C、Perl、PHP 这五种语言的诞生历史,正是我感兴趣的内容。FORTRAN 那一节看的我比较枯燥,Pascal 是参加 OI 的语言,我比较熟悉。C 我虽然没怎么入门,但也接触过,于是就一章一章的看下来了。Perl 的这一章,是 Larry Wall 写的历史,用女孩子的成长周期来形容每一个版本的 Perl,语言相当幽默风趣,浅显易懂,还有 Larry 在设计 Perl 时的心路历程。虽然我还没有读过一行 Perl 程序,但看完了这一章节,我对 Perl 有了极大的好感。我喜欢的,就是这种不羁的风格。务实、能用的思想,再加上一些宅男一样自娱自乐,不管旁人眼光的态度,让我十分痴迷。

后来,我在新华书店买到了一本《Perl 语言入门》,一本薄薄的小册子。虽说《Perl 编程语言》才是真正权威的教材,但我还是抱着试试水的想法,买了更薄、也更便宜的“小骆驼书”。事实证明,这对我来说是一个极端正确的选择——这本书实在是太棒了!哪怕到了十多年后的今天,我还是认为这本书是编程语言教材中的 No. 1!或许是这本书的作者们都是常年培训 Perl 的老师,他们讲起 Perl 来头头是道、语言风趣、深入浅出。虽然我在阅读的时候,手边没有一台电脑给我来实践,但随着阅读和书中的示例,我很容易的就理解了书中的内容。书中用虽然没有涵盖 Perl 的方方面面,但其中 Perl 的 20% 的内容,就可以解决 80% 的问题。同时,书本的内容引起了我的一些思考,以及计算机世界眼界的变化,带给我的影响是巨大的。

另外,之所以说先看“小骆驼书”是个极端正确的选择,是因为后来我出于对 Perl 的喜爱,还购买了更贵、也更厚重的“大骆驼书”,也就是《Perl 语言编程》。不知道是书的本来风格与我不合的原因,还是翻译水平的原因,我总是无法对这本书产生喜欢的情绪。到最后还是把它当成了 Perl 的 Reference Manual。

出于对于 Perl 的这种复杂的感情,当我听吴涛给没有接触过 Perl 的听众介绍说“Perl 是一种‘只写’的编程语言”的时候,我忽然想到了,我日常工作中要分析的数据,虽说我用 Ruby 和 Java 分别实现了相关版本,但时常又被告知需要其它方面的结果。与其这时候再来该程序,不如尝试用 Perl,来快速的写一些只写的脚本来工作?

于是我这个周末开始了尝试。因为已经很久没有碰 Perl 了,我只好找出了《Perl 语言入门》来,从头看起,然后通过运行示例程序,来恢复过去的知识。有了一点心得后,就马上尝试来写我日常需要的一个功能。现在我发现,Spreadsheet 这个模块很有用,用来分析我们系统导出的 Excel 表中的数据,可以比较方便的提取数据,而且写起来比 Java 上的 jxl 模块要简单方便的多。

只是时间长了,有些东西还是很生疏。比如我需要用到 switch 语句,就去搜索语法,得到的结果居然是 Perl 核心中没有 switch!然后有用其它技术来实现的,还有一些模块。确实是 Perl 的“怪”的体现。不过我还有时间,这个过程也很好玩就是了。

最后,对比起 Python 和 Ruby,我觉得 Perl 有更强烈的“顺手”这个特性。它没有很完美严格的“世界观”,不会执着于把一切都弄的很漂亮,它只是你手头的一件趁手的工具,甚至你用完了随意一丢也不怕摔坏。在 Perl 里,class 关键字可没有其它语言中这么方便。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据