Perl是我接触的第一个动态脚本语言,但其实上它的资历已经可以作为其它语言的祖母了,1987年,Larry Wall发布了Perl。那已经是20年前的事情了。在计算机世界,20年的时间已经好像是2个世纪以前那么久远了。下面列了一些常见的动态脚本语言的发布日期:
语言 发明人 发布时间 Perl Larry Wall 1987 python Guido van Rossum 1989 ruby 松本行弘 1993 php Rasmus Lerdorf 1994 lua 3位巴西人 1993 还有很多的动态脚本语言没有在上面列出,动态脚本语言确实是一个庞大的家族。那么问题是:为什么会有这么多的动态脚本语言?其实答案非常的简单:因为有更多的特殊需求。每种动态语言实际上都是因为某种特定的需求而诞生和进化的,没有那种语言可以完全替代另一种。追求一种无所不能的语言实际上是相当错误的,这就如同说“一个人能够适合世界上所有的工作”,这有些自大的可笑了。实际上,只要这个世界存在着文化的差异,存在着审美的差异,各种计算机语言就一定是共存的。
对于不同的计算机语言,我想至少有两种观点是值得欣赏的:
- 解决问题需要最合适的工具,如果你的工具箱里只有一,两把工具,那么你能够解决的问题就是很有限的
- 语言没有高低贵贱之分,学习一门语言如果交一个朋友,首先你要学会尊重他们,其次你要了解他最大的优势是什么
好了,我无意陷入各种语言之间的谁是谁非的闲言碎语中去,还是回到Perl语言本身上来吧。关于Perl语言,它最大的特点是什么呢?我认为应该是它的背景。Perl语言的发明者是一名语言学家,因此Perl语言也在很大程度上打上了人类语言的烙印:
- Perl语言的冗余性高,冗余性高是人类语言的特点,这样即使偶尔的失真也可以完整的表达语言的含义。一般计算机语言更倾向于简单直接的方式,从这个意义上说Perl语言是一个异类,它追求的是所谓“条条大路通罗马”,完成同一件事情可以有各种各样的方法,而且根本就没有所谓的最佳方法。这也同时造成了Perl代码因为彼此风格差异太大而很难互相看懂的弊端。但是没有人会否认,Perl也能写出很清晰的代码来,说到底,问题的关键其实不在于语言本身,而在于程序员的不同审美趣味。
- Perl语言的上下文环境,人类语言是依赖于上下文环境的,有时候省略了主语或宾语也不会造成理解的困难。一般计算机语言往往极力排斥这种做法,因为这往往造成代码的难以维护,从这个意义上说,Perl语言其实不适合大规模的软件开发。
- Perl语言的单数复数,正如英语中有单数和复数的单词区别一样,Perl语言用$标识单数变量,用@标识复数变量,用%标识散列,这些奇形怪状的符号更加增加了Perl代码的理解难度,如果天书一样。
- Perl语言的用途,Perl这个名词的真正含义其实是有些学术化的“实用报表提取语言”(PracticalExtraction andReportLanguage),但是很快就有人称它为“病态折中垃圾列表器”(Pathologically Eclectic Rubbish Lister)。可是无论如何,如果说还有一种象诗歌一样的计算机语言,那么一定是Perl。实际上,它的设计初衷也正是为了处理形形色色的文本。
总结一下,Perl语言是有些过于灵活和浪漫了,就象一个诗人,喜欢在自己的小圈子里浅吟低唱。他根本不适合大规模的编码模式,那根本不符合他的个性(如果你非要这样做,你就要自己承担一切后果)。但是如果你仅仅把他当作一个可爱的朋友,那么你一定会从他那里得到别样的体会。