值得一提的是,核心发展小组(称为 Perl Porters)的成员是一群高度热情奉献的人仕,全心投入发展出比您所能想像、用钱能买得到还要更好的免费软体。您可经由 news://genetics.upenn.edu/perl.porters-gw/ 和 http://www.frii.com/~gnat/perl/porters/summary.html取得关於新近发展计画 的情报。
尽管 GNU计画将 Perl囊括在它的发行中,但是没有叫「GNU Perl」这样的东西。 Perl既非自由软体基金会所创,亦非由其负责维护。Perl的发行条款同时也较 GNU软体更来得开放。
如果您愿意,您可以购买商业性的 Perl支援。但对大多数使用者来说,非正式性的支援通常已相当足够。详情请见「到哪里可买到商业性的 Perl支援」一问的回 答。
5(.004)
版的 Perl」要来得简单。但是有些人误将其会意为:perl5是一个单独的语言;这是不正确的。perl5只不过是对第五个主要发行版本(1994年 10
月)常用的称呼罢了。就像 perl4是指第四个主要发行(1991年 3
月),还有 perl1(1988年 1月)、perl2(1988年 6
月),以及 perl3(1989年 10
月)。
5.0的发行基本上是从零开始,所有程式码完全重新写过的版本。它已经被模组化、物件导向化、微调、精简化,及效率化,以致程式码几乎已变得和原来的不相同了。尽管如此,使用介面大致上仍然相同,而且和先前的版本之间保持了很高的 一致性。
为了避免「perl5是什麽语言?」这类的混淆,有些人索性完全避免「perl5」, 而单用「perl」来指称最近的 perl版本。其实用不着这麽累就是了。
Larry 和 Perl发展小组有时候会修改语言的核心部分,但总是尽一切力量让新版 和旧版保持一致。因此,尽管不是所有的 perl4 scripts都能在 perl5 之下跑得天衣无缝,因升级而导致按照先前版本的 perl所写的程式无法使用的情形几乎不曾发生(除非该程式倚赖已经被去除的 bugs,或使用了极少数新加入的指令来 命名)。
大多数的任务只需要 Perl语言的一小部分即可完成。发展 Perl程式的座右铭即 是「不只一种方法可以达到」(TMTOWTDI; There's More Than One Way To Do It, 有时读作「堤姆投迪」)。因此,Perl的学习曲线是既平(易学)且长的 (如果您要的话,有一大堆够您学的)。
最後,Perl(通常)算是解译式的语言。也就是说您写了程式後不需经由一道中 间的编码过程即可测试;这让您可以很快、很容易地测试及除错。这个方便试验的 特性又让学习曲线变得更加平坦。
有助於修习 Perl 的一些事:UNIX经验、对几乎是任何一种程式语言的经验、了解 regular expressions(正规表示法),以及看得懂旁人写的程式的能力。如果您有什麽想用 Perl来做的事,那麽可能已经有前人做过了,而且实例通常可免费取得。还有别忘了新的 Perl模组。模组在这份 FAQ 的第叁部分有详细的讨论,还有【别忘了您的好朋友】 CPAN,这会在第二部分谈到。
要比较各语言的异同最好的方法是试着用不同的语言写功能相同的程式。各程式语言都各有属於它们各自的新闻讨论群,您可从中学习(但希望您不是去和人辨论吵 架的)。
如果您有一个提供 API的程式库的话,您可用 C或 C++来写一个 Perl 延伸,然後便可透过它将程式库中的任何一部分动态载入您的 Perl主程式中。您也可以 反过来,用 C或 C++来写主程式,然後以即时动态载入的方式插入一些Perl程式码,产生一个威力强大的应用程式。
话虽如此,对解决某些特定的问题,使用小型、专精,专为特殊用途设计的语言总 是比较方便的。 Perl的设计是尽力地满足各种不同人的需要,因而不特别偏颇任何人。至於特殊功能语言的例子,随便举两个,譬如 prolog 和 matlab 便是。
说真的,如果您已经有用另一个语言写成的应用程式(而且写得很好)的时候,或 者是已经有替某些特定的工作设计的语言(例如:prolog, make),这个时候就不 需要用 Perl。
由於种种因素,Perl大概不太适合拿来做即时内嵌式系统、属於低层级的作业系统发展工作,例如周边设备的 drivers或环境转换码、复杂的多线共用记忆体应用程式,或非常大的应用程式。您会发现 Perl 本身便不是以 Perl写成的。
刚出炉的 Perl纯码编译器或许可帮忙去除一些上述的限制,但您要了解:Perl在本质上仍是一活性变数语言 (dynamically typed language),而非固性变数 (statically typed)。只要您不将核电厂或脑科手术监视器所用的程式放心地用 Perl来写,您自然就不会闯祸遭殃。这样 Larry晚上也可以睡得安稳些 --股市分析程式不在此限 :-)。
按标准术语来讲,program指已经由编译程序编译好、转为机器码,可多次执 行的程式;而 script则是每次执行时都必须透过一个解译程式来解译。然而,Perl程式严格说来,既非编译 (compiled) ,亦非解译式 (interpreted);因 Perl程式可转译成位元码形式存在(可说是某种 Perl虚拟机器 [virtual machine]),或转译为完全不同的语言,如 C或组合语言。所以光看原始码很难 说它到底是替纯解译器、或是 parse-tree解译器、位元码解译器,还是纯码编译器而写;因此这题很难给它一个确切的答案。
如果您的专题碰到瓶颈,特别是有关转译或测试方面的问题,那麽 Perl可以说绝 对会是一个既可行且快的解决之道。您在当说客的时候,千万别忘了要提:Perl已 被世界上许多大型的软硬体公司广泛、大量地使用,极为可靠、有效。事实上,现 Perl已成为许多 Unix业者所售的作业系统的标准配备了。而且如果您无法在 详尽的使用说明,包括这份 FAQ之中为您的问题找到解答的话,送封 post 到新闻讨论群即可。
如果您面对反对 perl升级的声音,那麽告诉他们 Perl发展小组已经完全不再维护或支援第四版的 perl了。perl5的另一个大卖点是它有大量的模组和延伸,可大大减少计画的发展时间。还有,告诉他们第四和第五版 Perl之间的差异就如 awk 和 C++的差别一样(嗯,或许没有差得那麽明显,但您知道我的意思就好)。如果您想得到支援而且想确保您现在所发展的软体在未来能继续工作的话,那麽您得跑有支援的版本。这大概也就是说要跑 5.004 版的,尽管 5.003 版仍算是不错(它只落後一年、一版)。不过因为有些严重的 bugs曾在 5.000 和 5.002版之间被消除,所以您至少应升级到比这几个版本高才是。
中译版着作权所有:萧百龄及两只老虎工作室。本中译版遵守并使用与原文版相同 的使用条款发行。