从此,世界上将多了一个Perl高手!

来源:互联网 发布:拳皇2002画质优化补丁 编辑:程序博客网 时间:2024/09/21 08:55

一直想着学好Perl语言,现在终于实现了。这是我学的除shell,python之后的第三个动态语言。

当然,在ERICSSON工作时的来自巴西的技术高手曾经像我推荐学习Ruby这种日本人发明的动态语言,但目前还没有此计划。尽管从世界程序语言排名来看,Ruby同样挤进了前十位,但是考虑到Ruby尽管从语言本身十分优美,但在现实应用中远远不如Perl语言广泛,比如Perl大量运用于互联网服务器端的CGI程序,以至于有人就说为何叫Perl而不是CGI语言呢?当然,Perl的运用远不止于此,可以运用在需要处理文本的地方。

对于计算机语言来说,尽管是个工具,好像各种语言相差不大,其实不然,到了具体的项目差别就大了。

记得以前在MOTO做项目时,里面很多程序是用bash shell写的,包括生成很多c++源文件。当时对于shell也是从零开始学习,等我学到高级shell的部分时,再回头看项目里面存在大量的shell程序,其实写得很繁琐,比如一个简单的例子从目录文件字符串里面提取文件名,提取目录名等等,其实高级shell里面一个函数,一行代码就搞定,但是项目代码里面经常花了二十几行写了个函数,然后调用执行。这就是软件业界经常被批判的“又去造个车轮子”,没有做到复用。

另一个例子是在项目里面,当时为了分析网管系统通过UML建模生成的MIB文件,采用的是IBM公司著名的Rational工具提供的类似VB Script脚本,里面也嵌入了大量的shell程序,记得当时为了向shell程序传递一个awk的变量,也是费尽了心思和周折。。。。。当时就想,要是这个东西是用Perl写得,该多好啊!

Perl就是一种胶水语言,可以把各种系统工具,语言写得程序很简练地“粘”到一起来,完成用户的功能。。。。而其核心功能就是——正则表达式!

Perl的设计哲学就是计算机程序90%的是在处理文本,10%处理其他。。。。。当然这似乎说得还是有点过分。。。毕竟很多具体行业应用,计算机程序不是大部分在处理文本,比如电信交换机,大部分都在围绕FSM(有限状态机)转。

Perl语言的很多风格都是我比较爱好的,相比于C,C++这种静态而严谨的语言而言,Perl更体现了自由和人性化的风格,当然Ruby也不例外,让程序员真正的把精力放在了实际的应用上面,而不是各种苛刻的语言方面——你必须小心奕奕地避免调入各种C/C++的陷阱之中。

关于这一点,Perl有两个细节让我印象深刻:

一是:变量不需要先声明后使用,而这是编译性语言(C, C++, Java)必须的规则!

二是:是基本变量还是列表取决于上下文,说白了同样一个东东在这里可能是这个意思,换个地方就可能是那个意思啦。其实这也更符合现实世界的情况,比如在公司,你可能是个软件设计师,但是回到家里,你就是儿子老公什么的。。你还是你。。。这难道不是吗?

Perl的精炼同样值得人学习,处理一个看似很复杂的文件任务时,有时也就一行到两行代码,如果用C语言去写,估计得要好几十行甚至上百行。当然代价就是代码看上去有点不好懂,因为大量采用正则表达式,这让很多开始接触Perl程序的人以为这是计算机乱码呢。

比如随便SHOW一行:$free_space =~ s/.* ([/d,]+) /w+ free/$1/;

所以,我认为正则表达之于Perl就像指针之于C语言一样,是灵魂,学得不好你就无法懂得这个语言的精髓和魅力所在,当然你也就无法在实际的项目中发挥语言本身的优势了。

当然,Perl还有一个很大的设计思想就是:做同一件事情,可以有很多种不同的选择!

动态语言最大的好处就是能够快速构建系统,更加接近现实世界和软件人员本身。

现在终于可以学习perl的高级部分啦。

至此,可以在计算机语言方面如虎添翼,[ 汇编 + 静态(C/C++/JAVA) + 动态(shell, Perl, Python) + 正则表达式 ] 成了一个比较完备的集合。至于那个MS的.NET, C#就让那些MS的FANS们去弄好了!

最后再重申两点:

1.语言本身只是一种工具而已,没有一种语言特性足够去完成一个项目,以前在MOTO工作时,里面的网管代理软件同时用到了C, C++, UML, VB Script, Bash shell, Perl。

2.  要部署更为有效的应用系统,仅熟悉语言本身是远远不够的,你必须还要懂得业务知识,比如电信交换机的FSM,网络协议,数据库,用户界面,图像视频流等。

否则,你就只能像《刀见笑》里面的那个杀猪的啦——拿着宝刀也不知道砍向哪里,呵呵!

原创粉丝点击