Perl 5.17.6
发布了,下载地址:

Perl是什么?

关于Perl的自学教程:

Perl 5.17.6 包含近 5 周的开发,牵扯近 8 万行代码的改动,涉及 460
个文件,30 个开发者。

  Perl是一个高阶程式语言,由 Larry
Wall和其他许多人所写,融合了许多语言的特性。它主要是由无所不在的
C语言,其次由 sed、awk,UNIX shell
和至少十数种其他的工具和语言所演化而来。Perl对
process、档案,和文字有很强的处理、变换能力,因此举凡有关快速原型设计、系统工具、软体工具、系统管理、资料库连结、图像程式设计、网路连结,和
WWW程式设计等之类的任务,都特别 适合用 Perl来做。这些特长不但使
Perl成为系统维护管理者和
CGI作者的宠儿,就连数学家、遗传学家、新闻从业者,甚至企业管理者也都用
Perl,所以或许您也该用。

Perl完全自学手册图文教程

(文/开源中国)    

  谁对 perl提供支援?由谁负责发展?它为什麽是免费的?

(Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。)

  Perl自由开放的发行方式要归功於发烧前的 Internet的传统文化及其作者
Larry Wall。Perl是由使用者提供支援。现在
Perl的核心、标准程式库、选择性安装的模组,以及您现在正在阅读的使用说明都出自於义务者之手。详情请见
perl原始码发行版中所附的 README档案底部的私人注记。

优点

  值得一提的是,核心发展小组(称为 Perl
Porters)的成员是一群高度热情奉献的人仕,全心投入发展出比您所能想像、用钱能买得到还要更好的免费软体。您可经由
news://genetics.upenn.edu/perl.porters-gw/ 和 http:
//www.frii.com/~gnat/perl/porters/summary.html取得关於新近发展计画
的情报。

Perl追求的是简单, 解决一个一般的问题用它几行代码就完成了.
一个稍复杂一点的问题代码也不会超过一屏!
在软件测试中,Perl通常是非常重要的角色。一般一个测试通用函数库就要分十几个文件,甚至更多,包含多达上千个定制功能。而这些函数将在主函数运行时,不定数量的被调用。几乎可以说,一切自动过程都是由Perl自己完成的,可见其功能的强大和在当今计算机技术高速发展的时期仍然发挥着重要的作用。

  尽管 GNU计画将 Perl囊括在它的发行中,但是没有叫「GNU
Perl」这样的东西。
Perl既非自由软体基金会所创,亦非由其负责维护。Perl的发行条款同时也较
GNU软体更来得开放。

Perl 最初是当做一种 Unix
的脚本语言设计的,但是它早就移植到大多数其它操作系统里了。因为
Perl 几乎可以在任何地方运行,所以 Perl
可以说是当今最具有移植性的编程环境;要想写可移植的
C/C++ 程序,你得在程序里加上一大堆 #ifdef
标签来区分不同的系统;要想写可移植的 Java 程序,你必须理解每种新的 Java
实现的特质;要想写可移植的shell,你可能要记住每条命令在每种操作系统上的语法,走运的时候你可能可以找到一些公共的东西;要想写可移植的
Visual Basic 程序,需要对“移植”有个更灵活的定义。

  如果您愿意,您可以购买商业性的
Perl支援。但对大多数使用者来说,非正式性的支援通常已相当足够。详情请见「到哪里可买到商业性的
Perl支援」一问的回 答。

让我们很高兴的是 Perl
避免了所有这些问题,同时还保留了这些语言中的许多优点,同时还有一些自己的特色。Perl
的特色来自许多方面:它的特性集的工具,Perl
社区的创造性,以及开源运动的大环境。不过,许多这些特性都是混合的东西;Perl
的身世复杂,它总是把事物看成是优点的不同方面,而不是弱点。Perl
是“背黑锅我来”的语言。如果你觉得自己陷入一团乱麻之中,非常渴望自由,那么请使用
Perl。

  我该用哪一个版本的 Perl?

Perl 是跨文化的。Perl 的爆炸性增长很大程度上是因为那些前 Unix
系统程序员的渴望,他们希望从他们的“老家”带着尽可能多的东西。对于他们而言,Perl
是可移植的 Unix
文化蒸馏器,是”此路不通”的沙漠中的绿洲。从另外一个角度来看,Perl
还可以从另外一个方向运转:在 Windows 上工作的 web
设计者通常会非常开心地发现他们的 Perl 程序可以不加修改地在 Unix
服务器上跑。

  您绝对该用第五版。第四版不但老旧、功能较局限,而且已经不再维护了。它最後
一次的修正 (4.036)是在 1992年。Perl最新的量产发行版本是5.004。等到您
读这篇文章时,我们可能已经又发行了几个正式的除错版本,同时大概又会有些替
下一版 路的实验版出来。本文由此开始凡提及 Perl语言,皆以目前的量产发行
为准,除非另外特别注明。

尽管 Perl 在系统程序员和 web
设计师中间非常流行,但这只是因为是他们最早发现 Perl 的,Perl
可以用于更广泛的用途。从 Perl
最早的文本处理语言开始,它已经发展成为一种非常复杂的,通用的编程语言,以及完整的开发环境,包括调试器,调节器,交叉引用,编译器,库,语法提示编辑器,以及所有其它“真正”的编程语言所具有的所有挂勾,只要你需要。当然这些东西都是让我们可能处理难的问题的东西,而且很多其它语言也可以做到这一点。Perl
之所以成为 Perl
是因为它从来不会因为保持简单事情简单化而丢失其他方面的特性。

  perl4和 perl5各代表什麽?
  perl4 和 perl5 是对
Perl程式语言的两个不同版本的非正式称呼,因为说「perl5」要比说「第
5(.004)版的
Perl」要来得简单。但是有些人误将其会意为:perl5是一个单独的语言;这是不正确的。perl5只不过是对第五个主要发行版本(1994年
10 月)常用的称呼罢了。就像 perl4是指第四个主要发行(1991年 3 月),还有
perl1(1988年 1月)、perl2(1988 年 6 月),以及 perl3(1989年 10
月)。

因为 Perl
既强大又好用,所以它被广泛地用于日常生活的方方面面,从宇航工程到分子生物学,从数学到语言学,从图形处理到文档处理,从数据库操作到网络管理。很多人用
Perl 进行快速处理那些很难分析或转换的大批量数据,不管你是处理 DNA
序列,网页,还是猪肚皮的未来都无所谓。实际上,在 Perl
社区有一个笑话就是,下次股市大崩盘就很有可能是哪个家伙写的脚本里头有bug造成的。(不过,乐观点来看就是,任何还在失业的股票分析师仍然有可以利用的技巧。)

  5.0的发行基本上是从零开始,所有程式码完全重新写过的版本。它已经被模组化、物件导向化、微调、精简化,及效率化,以致程式码几乎已变得和原来的不相同了。尽管如此,使用介面大致上仍然相同,而且和先前的版本之间保持了很高的
一致性。

Perl 的成功有许多原因。Perl
早在开源软件的名字出现之前就已经是一个成功的开源项目了。Perl
是自由的,并将永远自由下去。你可以在任何合适的场合使用
Perl,只需要遵守一个非常自由的版权就可以了。如果你在从事商业活动并且还想使用
Perl,那么用就是了。你可以把 Perl
嵌入到你写的商业软件中而不需要支付任何费用也没有任何限制。如果你碰上一个
Perl 社区解决不了的问题,那你也还有最后的一招:源程序本身。 Perl
社区不会在“升级”的伪装下租给你它们的商业秘密。而且 Perl 社区也不会“停业
”,更不会让你孤立无援。

  为了避免「perl5是什麽语言?」这类的混淆,有些人索性完全避免「perl5」,
而单用「perl」来指称最近的 perl版本。其实用不着这麽累就是了。

Perl 是自由软件这一点无疑对它是有帮助的。但这一条并不足以解释 Perl
现象,因为许多自由软件包没有能繁荣起来。Perl
不仅自由;而且好玩。人们觉得自己在 Perl
里可以有创造力,因为它们有表达的自由:他们可以选择是为计算机速度优化还是为程序员的速度优化,是冗长还是简洁,是选择可读性还是可维护性,或者选择复用性,移植性,接受性和传授性等等。假如你进入一次模糊的
Perl 比赛,甚至你还可以为模糊性做优化。

  Perl的发展已稳定了吗?
  融合了除错和新功能的量产发行在推出前皆经过广泛的测试。自
5.000发行以来, 我们平均一年才出版一次量产发行。

Perl 可以给予你所有这些自由,因为它是一门有着分裂人格的语言。Perl
同时是很简单并且很富有的语言。Perl
从其它地方拿来好主意,然后把它们安装到易用的框架里面。对于只是喜欢她的人来说,Perl
是实用抽取和报表语言(Practical Extractoin and Report
Language)。对那些热爱她的人而言,她是变态电子垃圾制造者(Pathologically
Electric Rubbish Lister)。在少数人眼里,Perl
是毫无意义的重复练习。不过世界需要一点点冗余。精简主义者总是想把事物分隔开。而我们则总是企图把它们合并到一起。

  Larry 和
Perl发展小组有时候会修改语言的核心部分,但总是尽一切力量让新版
和旧版保持一致。因此,尽管不是所有的 perl4 scripts都能在 perl5
之下跑得天衣无缝,因升级而导致按照先前版本的
perl所写的程式无法使用的情形几乎不曾发生(除非该程式倚赖已经被去除的
bugs,或使用了极少数新加入的指令来 命名)。

Perl
之所以是简单的语言是有很多原因的。比如你用不着知道什么特殊的指令就可以编译
Perl
程序–只要把它当做批处理或者
shell 脚本执行就可以了。Perl 的类型和结构很容易使用和理解。Perl
对你的数据没有任何限制–你的字串和数组可以要多长就多长(只要你有足够的内存),而且它们都会自动增长。Perl
不会强迫你学习新的语法和语意,Perl 改从许多其它你已经熟悉的语言里(比如
C, awk, BASIC 和 Python,
英文,希腊语等)借来语法。实际上,任何程序员都可以从书写良好的
Perl代码段中读懂它的含义。

  Perl难学吗?

最重要的是,你不用先学习所有 Perl
的东西就可以开始写有用的程序。你可以写很小的 Perl
程序。你也可以象小孩那样写 Perl
程序,我们保证不会笑话你。或者更准确地说是,我们绝不会笑话小孩做事情的创造性。Perl
里的许多观点都是从自然语言中借来的,其中一条最好的观点就是只要你能把自己的意思表述清楚,那么你就可以使用这些语言的一个子集。Perl
文化可以接受任何熟练程度的成员。我们不会在你背后放个语言警察。如果你的老板不炒你,而且你的
Perl 脚本也能完成工作,那么它就是“正确”的。

  Perl不但容易上手,也容易继续学下去。它看起来和大多数您可能已接触过的语言一样。所以如果您只写过
C 程式、或 awk script、shell script,或甚至只是 Excel的
macro(巨集),您已经在半路了。

尽管 Perl
很简单,但它仍然是一种特性很丰富的语言,如果你想用那些特性的话,那你就要学习一些东西。这也是把难题变简单的学费。虽然你要想把所有
Perl
能做的事情吸收还需要一些时间,但到你需要这些功能的时候你就会非常开心地发现
Perl 已经可以做这些事情了。

  大多数的任务只需要 Perl语言的一小部分即可完成。发展
Perl程式的座右铭即 是「不只一种方法可以达到」(TMTOWTDI; There’s More
Than One Way To Do It,
有时读作「堤姆投迪」)。因此,Perl的学习曲线是既平(易学)且长的
(如果您要的话,有一大堆够您学的)。

由于 Perl 的继承性,就算它只是用做数据归纳语言的时候也有丰富的特性,Perl
一开始就设计成可以浏览文件,扫描大量文本并且生成动态数据以及打印出这些数据的良好格式化的报表。不过,随后
Perl
就开始风行,于是它就成了可以操作文件系统,进程管理,数据库管理,进行 C/S
编程和安全编程,web
信息管理,甚至可以进行面向对象和面向功能的编程的语言。而且这些功能并非只是在
Perl 这边,每种新功能都和其它东西交流得很好,别忘了 Perl
从一开始就是设计成胶水语言的。

  最後,Perl(通常)算是解译式的语言。也就是说您写了程式後不需经由一道中
间的编码过程即可测试;这让您可以很快、很容易地测试及除错。这个方便试验的
特性又让学习曲线变得更加平坦。

而且 Perl 并不仅仅只能黏合它自己的特性。Perl
是设计成可以用模块扩展的语言。你可以用 Perl 快速设计,编写,调试和部署
Perl
应用,并且你还可以在需要的时候很方便地扩展这些应用。你可以在其它语言里嵌入
Perl,而且你也可以在 Perl
里嵌入其它语言。通过模块输入机制,你可以把这些外部的扩展当做内置于 Perl
的特性。那些面向对象的外部库在
Perl 内部仍然保持面向对象的特征。

  有助於修习 Perl
的一些事:UNIX经验、对几乎是任何一种程式语言的经验、了解 regular
expressions(正规表示法),以及看得懂旁人写的程式的能力。如果您有什麽想用
Perl来做的事,那麽可能已经有前人做过了,而且实例通常可免费取得。还有别忘了新的
Perl模组。模组在这份 FAQ
的第叁部分有详细的讨论,还有【别忘了您的好朋友】
CPAN,这会在第二部分谈到。

Perl 还在许多其它方面协助你。和严格的每次执行一条命令的命令文件和 shell
脚本不同的是,Perl
先把你的程序快速编译成一种内部格式。和其它任何编译器一样,这个时候还进行各种优化,同时把碰到的任何问题反馈给你。一旦
Perl
的编译器前端对你的程序表示满意了,它就把这些中间代码交给解释器执行(或者是给其它的能生成
C 或者字节码的模块后端)。听起来挺复杂,不过 Perl
的编译器和解释器干这些活效率相当高,我们的编译-运行-修改的过程几乎都是以秒计。再加上
Perl
的许多其他开发特性,这种快速的角色转换很适合做快速原型设计。然后随着你的程序的成熟,你可以逐步拧紧身上的螺母,减少散漫增强纪律。如果你做得好,Perl
也能帮你这个忙。

  Perl和其他的程式语言比起来如何?例如 Java, Python, REXX, Scheme,或
Tcl?

Perl
还可以帮你写更安全的程序。除了其它语言提供的典型的安全接口之外,Perl
还通过一种跟踪数据的机制给你提供预防意外安全错误的保护,这样就可以在灾害发生之前预防其发生。最后,Perl
还可以让你设置一个特殊的防护隔段运行那些来源不明的 Perl
代码,以此来杜绝危险操作。

  Perl在某些地方比较好,某些地方较差。精确地说到底哪些方面好或坏通常视个
人偏好而定,所以在新闻讨论群中问这种问题很可能会掀起一场毫无建设性的圣战。

不过,偏执一点儿说,Perl 帮你的大部分内容和 Perl
本身没有什么关系,而是和使用 Perl 的人有关。坦率地说,Perl
社区的人们可以说是地球上最热心的人了。如果 Perl
运动里面有那么一点点宗教色彩的话,那么这就是它的核心了。Larry 希望 Perl
社区像一小片天堂那样运转,目前看来他的愿望基本上是实现了。我们也请你为此做出自己的努力。

  要比较各语言的异同最好的方法是试着用不同的语言写功能相同的程式。各程式语言都各有属於它们各自的新闻讨论群,您可从中学习(但希望您不是去和人辨论吵
架的)。

Perl之所以强大,
是因为有CPAN,
CPAN上面有无数的开源模块,
从科学计算到桌面应用到网络等等各个方面都有大量的模块!
并且世界上也还有无数的人在向上面添加模块! 如果你想要用PERL实现某功能,
不用自己做, 在CPAN上面搜一搜, 多半都会得到已有的结果! CPAN(”the
Comprehensive Perl Archive Network”全面的 Perl 存档网络)是查找任何 Perl
有关的东西的中心仓库。它包含从整个 Perl 社区收集来的智慧:成百上千的
Perl 模块和脚本,相当于好几本书的文档,以及整个 Perl
发布。如果有东西是用 Perl
写的,而且这个东西很有用而且是自由的,那么它很有可能就在 CPAN 上。

  我可以用 Perl来做【某种差事】吗?

缺点

  Perl有足够的弹性和扩充性,从只需要写短短一行的档案处理工作到复杂的系统,几乎没有什麽做不到的。对有些人来说,Perl的是拿来做写
shell程式的理想替代品。其他人则用高阶的 Perl来替代处理许多原先需要用 C或
C++ 一类的低阶语言来达到的程式。哪些差事决定要用
Perl来处理,这一切都得看您(或许还有您的经理…)。

也正是因为Perl的灵活性和“过度”的冗余语法,也因此获得了write-only的“美誉”,因为许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍。但Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。

  如果您有一个提供 API的程式库的话,您可用 C或 C++来写一个 Perl
延伸,然後便可透过它将程式库中的任何一部分动态载入您的
Perl主程式中。您也可以 反过来,用 C或
C++来写主程式,然後以即时动态载入的方式插入一些Perl程式码,产生一个威力强大的应用程式。

很多时候,perl.exe进程会占用很多的内存空间,虽然只是一时,但是感觉不好。

  话虽如此,对解决某些特定的问题,使用小型、专精,专为特殊用途设计的语言总
是比较方便的。
Perl的设计是尽力地满足各种不同人的需要,因而不特别偏颇任何人。至於特殊功能语言的例子,随便举两个,譬如
prolog 和 matlab 便是。

阿里云大学官网(阿里云大学 –
官方网站,云生态下的创新人才工场)


  哪些场合下不适合用 Perl?

  当您的主管禁止的时候 — 不过请务必考虑把他们换掉 。

  说真的,如果您已经有用另一个语言写成的应用程式(而且写得很好)的时候,或
者是已经有替某些特定的工作设计的语言(例如:prolog, make),这个时候就不
需要用 Perl。

  由於种种因素,Perl大概不太适合拿来做即时内嵌式系统、属於低层级的作业系统发展工作,例如周边设备的
drivers或环境转换码、复杂的多线共用记忆体应用程式,或非常大的应用程式。您会发现
Perl 本身便不是以 Perl写成的。

  刚出炉的
Perl纯码编译器或许可帮忙去除一些上述的限制,但您要了解:Perl在本质上仍是一活性变数语言
(dynamically typed language),而非固性变数 (statically
typed)。只要您不将核电厂或脑科手术监视器所用的程式放心地用
Perl来写,您自然就不会闯祸遭殃。这样 Larry晚上也可以睡得安稳些
–股市分析程式不在此限 。

  「perl」和「Perl」有什麽不同?

  二者差一个位元。喔,您不是说在 ASCII上的差别啊? Larry
现在用「Perl」来代表语言本身,而以「perl」来表示该语言的体现,即目前的解译器。因此,作者有句幽默小语说:「只有
perl可以解译
Perl」。要不要遵照这个用法是您的自由。举一反叁的话,我们可依样画葫芦地说「awk
和 perl」还有「Python 和 Perl」,但却不可将「awk 和 Perl」或是「Python
和 perl」摆在一起。

  Perl程式应算是 program还是 script?

  都无所谓。按标准术语来讲,program指已经由编译程序编译好、转为机器码,可多次执
行的程式;而
script则是每次执行时都必须透过一个解译程式来解译。然而,Perl程式严格说来,既非编译
(compiled) ,亦非解译式 (interpreted);因
Perl程式可转译成位元码形式存在(可说是某种 Perl虚拟机器 [virtual
machine]),或转译为完全不同的语言,如 C或组合语言。所以光看原始码很难
说它到底是替纯解译器、或是
parse-tree解译器、位元码解译器,还是纯码编译器而写;因此这题很难给它一个确切的答案。

  JAPH是什麽?   
  这是过去一些在讨论群中自称 “just another perl hacker”
的人的签名档,约有一百个比较早期的,可在
取得。

  到哪儿可拿到 Larry Wall的智慧讽语 (witticisms)?

  一百多条 Larry的讽语,源自他【在讨论群】的
posts或原始码,可在 取得。

  我要如何取信、说服我的系统管理者/上司/属下使用第 5/5.004版的
Perl,而不去用其他的语言?
如果您的管理阶层或属下对没有支援的软体,或是未正式包含在所购买的作业系统中的软体存有戒心的话,您可以试着从有助他们自身利益这方面下手。因为如果程式设计师能由善加利用
Perl的结构、功能性、简单性,和威力而获得更大的生产力的话,那麽典型的管理者/上司/员工或许便可因而加以说服。此外,使用
Perl,总的来讲,和其他语言相较,或许也有助於减少交件的时间。强调这个论
点或许对说服他们会有帮助。

  如果您的专题碰到瓶颈,特别是有关转译或测试方面的问题,那麽
Perl可以说绝
对会是一个既可行且快的解决之道。您在当说客的时候,千万别忘了要提:Perl已
被世界上许多大型的软硬体公司广泛、大量地使用,极为可靠、有效。事实上,现
Perl已成为许多 Unix业者所售的作业系统的标准配备了。而且如果您无法在
详尽的使用说明,包括这份 FAQ之中为您的问题找到解答的话,送封 post
到新闻讨论群即可。

  如果您面对反对 perl升级的声音,那麽告诉他们
Perl发展小组已经完全不再维护或支援第四版的
perl了。perl5的另一个大卖点是它有大量的模组和延伸,可大大减少计画的发展时间。还有,告诉他们第四和第五版
Perl之间的差异就如 awk 和
C++的差别一样(嗯,或许没有差得那麽明显,但您知道我的意思就好)。如果您想得到支援而且想确保您现在所发展的软体在未来能继续工作的话,那麽您得跑有支援的版本。这大概也就是说要跑
5.004 版的,尽管 5.003
版仍算是不错(它只落後一年、一版)。不过因为有些严重的 bugs曾在 5.000 和
5.002版之间被消除,所以您至少应升级到比这几个版本高才是。