技术开发 频道

用Perl:痛并快乐着!!

  【IT168 技术文档】最近因为工作需要,又看了一遍《programming perl》。感觉perl有很多很牛的、很先进的思想,因为开发的早,也遗留了一些问题。这里想谈一下,点到即止,读者最好有一些基础:

  1、好东西

  首先perl有自己的吉祥物——一只大骆驼,这是其他语言没有的(python有抄袭perl的嫌疑,不算)。

  1)最牛逼的就是引入“语言环境”的概念,让机器努力去理解你要干什么,而不是你努力去告诉机器你想干啥。这得益于larry的语言学背景。用习惯以后,你就会迷上这个特性。

  2)“符号引用”:一般语言只有类似perl中“直接引用”的东西。而“符号引用”就是把字符串存到变量里,然后这个变量就可以当字符串使,而且是怎么使都行。比如

  如果$var="abc";

  那么${var}def等于"adcdef",$${var}def等于$abcdef。牛吧,java里不能这么干吧,爽!

  3)“正则表达式”:现在很多语言都支持正则,但可以毫不夸张的说,perl 是实现的最好的。简单明了,用最少的字符作最多的事。用过perl 以后再用别的语言的正则,大有一种曾经沧海难为水的感觉。现在看《java编程思想》第三版就觉得里面的正则怪怪的,还要打两个\\,如果要插入一个字面意义的\,就要打\\\\。妈的,看着代码笑都笑死了。虽然我也很爱java(好找工作啊),可是java的正则......唉...

  4)对数组和哈希的强大支持:java中一般的数组能做的事情非常有限,如果想要一些高级的功能必须用到容器。perl遵循“易者易为,难者可为”(《learning perl》中译为“易者易为,难者难为”,我觉得不太好)的原则,对普通的数组和哈希提供了很强的支持,比如数组和哈希的拷贝,数组与哈希的互相转换,用变量$#代表数组的最后一个下标,还有数组和哈希的混合体——伪哈希等等,非常方便。

  5)“pod”:这大概相当于java中的嵌入式文档/**.......*/。 Perl中是这样的

  =pod

  ........

  =cut

  很先进的思想,年纪这么大的语言中有这种特性,不容易啊!顺便提一句,很多人抱怨Perl中没有多行注释,其实在非正式场合,=pod......=cut是个不错的选择。

  大家都知道,perl是一种面向过程的语言,开发的又较早,随着时代的进步,perl既要与时俱进又要向后兼容,这就带来了一大堆的问题,下面是我认为比较主要的:

  1)我认为最恶心的就是面向对象的支持了,面向过程的语言非要支持面向对象是个什么鸟样,看过perl之后你就知道了。perl的精华部分接受起来非常容易,逻辑性强、自成一体又与unix有很多相似之处,记得我好想只用了三周左右就上手了。我学perl耗时最长的有两个一个是my,local,our,再一个就是面向对象了。语言就是这样,好东西一般就比较好学,那些学了半天都搞不定的,多半也不是啥好货。perl对面向对象的实现可以说完全违背了perl的原则——“易者易为,难者可为”。有段时间,perl中恶心的面向对象差点使我放弃了这种语言。不过压住火来说,如果我们愿意用加下划线的方式实现私有变量和方法,perl中的面向对象倒也不是太糟。咳,我们又能怎么样呢,吐啊吐啊就习惯了。

  2)perl中第二烂的是my,local和our,属于简单问题复杂化的典型。我花时间最多的就是搞懂他们仨到底是咋回事,可以说是便阅各种书籍——现在是不是全懂还不敢说。my和our分别是在5.0和5.6时引进的,我估计larry也有自己的苦衷,但结果摆在这里,一个字,烂。

  3)就算perl有千般不好,万种不是,perl6会给我们活下去的希望。但perl6蜗牛般的行进速度,让我们有理由怀疑,这只鹦鹉Parrot还飞的起来吗? 现在技术发展这么快,perl这只大骆驼也不知还能撑多久。对于parrot项目,我本人持悲观态度。美人自刎乌江岸,烽火曾烧赤壁山,将军空老玉门关。伤心秦汉,生灵涂炭,读书人一声长叹。

  以上就是我对perl的一点看法,一家之言,有不对的地方还请方家指正。

【查看原文】

0
相关文章