Perl是什么东西呢? 它是Practical Extraction Report Language等字的缩写,是一种能扫视任意文字文件,并且能从中取出信息制成报表的解译语言(Interpreter)。如果你懂UNIX的话,它的目 的就是用来取代UNIX原有的sed、awk与shell script的组合,用来汇集信息、产生报表的一个工具语言(程序)。Perl的作者是Larry Wall <lwall@netlabs.com>。他曾经贡献过好几个很有用的Public Domain程序给大家使用,包括patch和rn。他设计Perl时的哲学是以实用为第一优先(所谓的实用就是语言容易使用、有效率,而且完整),而不 是设计一个看起来很漂亮的语言(漂亮就是程序非常的小,语法幽雅,而且只由最少的语法基本元素构成),所以只要你学上手了,你就会深深的喜欢上Perl的 实用性和方便性。
Perl包含了C、sed、awk和sh这几个工具最好的特色,而且主要的语法很接近C语言,对原本熟悉C语言的人来说非常容易上手。就我个人的经验,除了C以外,如果能再懂shell script的语法是最好不过了,因为Perl中一些符号的使用和shell script是一致的。当然如果又懂得awk和sed那就更好了。Larry Wall说过一句话:「Perl是懒人用的工具」(于我心有戚戚焉^_^)。如果Perl不是比其它语言更好更简单更容易上手,恐怕很少人愿意去学习新的程序语言。
正由于Perl的特性,容易处理字符串参数的传递,自然成了某些特殊用途的新宠,尤其是CGI,彷佛Perl天生是为了CGI而设计的! 事实上CGI本身定义是和使用的程序语言种类无关的,你可以用C、Fortran、甚至Visual Basic、Delphi来写CGI程序。那为什么大家现在都采用Perl呢? 原因有下面几点:
- ⊙Perl有非常杰出的文字处理能力,能轻易地产生HTML檔,尤其它具有完整的Regular Expression语法,使得在C语言看来必需要写一大串程序代码的功能,Perl几行就解决了。
- ⊙Perl是一种直译式语言,因此可以避免在各种不同系统上,还需要重新编译的麻烦。
- ⊙Perl的检查旗标(-T)可以保护你的Web Server,避免被未经授权的client破坏。
一个语言的好坏,我想我们可以从三个方向来看:数据型态(data type)、流程控制叙述(control statements)、特殊功能。
- 1.Perl的数据型态跟C语言和Pascal不大一样,但它也支持指标(pointer,Perl5以后才支持),所以也可以和C语言一样组合出很复杂的数据结构(data structure)。特别的是Perl有一种新的data type:相关数组,它和一般数组没什么不同,差别只在它的索引值是用字符串,而非一般常用的整数值,因此相关数组不像一般数组一样有次序的概念,它没有所谓的第一项数据这种说法。我个人认为如果能善用这种data type会带给你意想不到的收获哦。
- 2.Perl的条件控制叙述(conditional control statements)与循环控制叙述(loop control statements)几乎和C语言一模一样,甚至语法和一些常用的指令也和C语言很类似,这对一般使用者而言是很方便的,可以很快的让使用者进入状况, 进一步了解Perl的精华。而在Perl5中又引进了模块化和区域变量(local variables)的观念,大大的增强了Perl的能力,使Perl几乎变得无所不能。
- 3.Perl处理字符串的能力是众所皆知的,除了它的纯量变量(scalar variable)可以很轻易的存取字符串,特别的是Perl提供和UNIX很相近的Regular Expressions语法,这种格式辨认(pattern-matching)的语法很复杂但十分强大,大大地增强了Perl处理字符串的能力,要善用Perl处理字符串的能力,就得先对Regular Expressions痛下一番功夫不可。这个东东实在不好懂,不过只要你用上了手,真的是如虎添翼,每次使用时都会为它强大的功能窃喜,反而觉得C平淡无奇。另外Perl有一堆特殊的全域变量(global variables),用来设定程序的执行环境和其它细节,可能小到数组索引的起始值,大到输出字段的分隔符号都有影响。这么多的特殊变量对大多数的人而言是只是个困扰,但是我建议若要深入了解Perl、善用Perl,最好多了解这些特殊变量的意义。
说了这么多Perl的优点,其实Perl也是有缺点的,最令人垢病的就是执行速度。由于 Perl是直译式的程序语言(Interpreter),不需要事先经过编译(compile),这一点在发展程序初期很有用,程序写好了就可以直接 run了,但缺点是程序执行的速度会变慢,不利于发展大程序或系统程序。不过Perl对上述一般解译语言的缺点做了一点改良,它在执行时会先加载整个程序 码,并执行初步的compile,包括语法检查和建立符号表,因此Perl比一般script语言安全而且快多了。但是就我观察所得,Perl有一些设计 实在很浪费内存和CPU,似乎Perl并不很在意内存和速度,而是以实用性和方便性为优先考虑。其实由于硬件技术的进步,对现在来说,内存和CPU 速度已经不是那么令人在意,反而程序的安全性和亲和性才是考虑的重点,像Microsoft WORD这只大怪兽一样,所以对速度要求比较多的玩家,也只有请你多多忍耐了。
总而言之,Perl的优点多多,尤其是它优异的处理字符串能力,更使它异军突起,成为CGI程序的新宠,这也是为什么Perl会流行起来的主要原因。