fbpx
维基百科

Perl

Perl高階通用直譯式動態程式语言家族。最初设计者拉里·沃尔為了讓在UNIX上進行報表處理的工作變得更方便,決定開發一個通用的腳本語言,而在1987年12月18日發表。目前,Perl语言家族包含两个分支Perl 5以及Perl 6。雖然Perl不是正式的首字母縮略詞[8],但仍有各種各樣的逆向首字母缩略词,包括“實用的提取和報告語言”。[9]

Perl
编程范型多重编程范式函數指令式面向对象 (類別為基)、反射过程式事件驅動泛型
設計者拉里·沃尔
實作者拉里·沃尔
发行时间1987年12月18日,​35年前​(1987-12-18
目前版本
  • 5.36.0 (2022年5月28日;穩定版本)[1]
型態系統动态
實作語言C语言
作業系統跨平台
許可證艺术许可协 1.0[2][3]
GNU通用公共许可证[4]
文件扩展名.pl, .pm, .t, .pod
網站www.perl.org
啟發語言
AWKC语言C++LispPascal, sedSmalltalk 80Unix shell
影響語言
CoffeeScriptECMAScriptGroovy
JavaScriptJuliaLPCPerl 6PHPPythonRubyWindows PowerShell

Perl借用了Csedawkshell脚本、Lisp以及很多其他程式語言的特性。其中最重要的特性是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN

2000年开始,拉里·沃尔著手開發Perl 6來作為Perl的後繼,Perl 6語言的語法有很多轉變,也被視為Perl家族中的另一個語言(Perl 6於2019年更名為Raku)。[10]

Perl语言应用广泛,涵盖CGI、图形编程、系统管理、网络编程、金融、生物等领域。由于其灵活性,Perl被称为脚本语言中的瑞士军刀[11]

鉴于Perl在实际工程应用中广泛使用,MacOSLinuxFreeBSD等现代化操作系统默认安装Perl。

历史

早期版本

拉里·沃尔在1987年开始写作Perl,那时他正在Unisys程序员[12],并且在1987年12月18日把1.0版本发布到了comp.sources.misc新闻组[13]。这个语言在接下来的几年内很快地发展起来。

沃尔最早的确把这个语言称为“Pearl”(珍珠),因为他希望自己开发的语言有一个吉利的名字而且要尽量短小好记,他甚至声称早已考虑过所有三个及四个字母的词汇,以及自己妻子的名字Gloria。然而另一门语言PEARL早已存在,为了防止混淆,沃尔才把它改名Perl。

Perl 2,于1988年发布,特色是有一个更好的正则表达式引擎,Perl 3,于1989年发布,添加了对二进制数据流的支持。

从前,Perl唯一的文档是一个逐渐变长的手册页。在1991年,《Programming Perl》(被许多Perl程序员因封面称为“骆驼书”),出版了,而且变成了一个真正的Perl语言的参考资料。同时,Perl版本号变成了4,不是因为这个语言的重大改变,而是因为这本书的特殊意义。

早期的Perl 5

Perl 4的一系列维护的版本,最后一版是1993年的Perl 4.036。那时,沃尔废弃了Perl 4,开始开发Perl 5。Perl 5的最初始设计持续到了1994年。《perl5-porters邮件列表于1994年5月为了共同移植Perl 5而建立。这将主要的论坛留给了Perl 5的开发,维护,和移植[14]

Perl 5.000于1994年10月17日发布[15]。这是一个几乎完全重写了的解释器,而且它给这个语言添加了很多新的特性,包括对象,引用,局部变量,和模块。很重要地,模块提供了一个不用修改直译器就可以扩展语言的方法。这使得核心的直译器非常稳定,即使它允许一般的Perl程序员添加新的语言特性。从此,Perl 5的开发就活跃起来了。

Perl 5.001于1995年3月13日发布。Perl 5.002于1996年2月29日发布,带有参数类型的特性。这允许模块的作者写出像Perl内部命令那样智能的子程序。Perl 5.003于1996年6月25日作为一个安全更新的版本发布。

Perl 5历史中最重要的事件之一是支持了模块。在1995年10月26日,CPAN,一个发布Perl模块的网站,建立了;截至2015年11月,它已经有超过12457个作者写的157794多个模块了[16]

Perl 5.004于1997年5月15日发布,添加了UNIVERSAL包,这给了Perl一个所有的类的基础和要求使用模块的特定版本的能力。另一个重要的开发是包括了CGI.pm模块[17],有助于Perl发展为一个CGI脚本语言[18]

Perl现在也支持在Microsoft Windows和其它一些操作系统下运作[17]

Perl 5.005于1998年7月22日发布。这个版本包括了一个更好的正则引擎,一个编译系统(通过B::*模块),qr//正则引用操作符,一个基础模块的选集,并且又支持了一些其它的操作系统,包括BeOS[19]

2000年至今

主要版本 最后更新
舊版本,不再支援: 5.5 2004年2月23日 (2004-02-23)[20]
舊版本,不再支援: 5.6 2003年11月15日 (2003-11-15)[20]
舊版本,不再支援: 5.8 2008年12月14日 (2008-12-14)[20]
舊版本,不再支援: 5.10 2009年8月23日 (2009-08-23)[20]
舊版本,不再支援: 5.12 2012年11月10日 (2012-11-10)[20]
舊版本,不再支援: 5.14 2013年3月10日 (2013-03-10)[20]
舊版本,不再支援: 5.16 2013年3月11日 (2013-03-11)[20]
舊版本,不再支援: 5.18 2014年10月2日 (2014-10-02)[20]
舊版本,不再支援: 5.20 2015年9月12日 (2015-09-12)[20]
舊版本,不再支援: 5.22 2017年7月15日 (2017-07-15)[20]
舊版本,不再支援: 5.24 2018年4月14日 (2018-04-14)[20]
舊版本,仍被支援: 5.26 2018年4月14日 (2018-04-14)[20]
當前版本: 5.28 2018年6月23日 (2018-06-23)[20]
格式:
舊版本
舊版本,仍被支援
当前版本
最新预览版本
未来版本

Perl 5.6于2000年3月22日发布。大的修改包括64位支持,Unicode字串支持,大文件支持(即:超过2GiB的文件)以及“our”关键字[21][22]。在开发Perl 5.6的时候,开发组决定把版本名称作成类似其它开源项目的;在5.005_63版之后,下一个版本变成了5.5.640,计划是开发版本用奇数,稳定版本用偶数。

2000年时,拉里·沃尔询问社区对Perl新版本的建议。这个进程的结果在361 RFC(评论请求)文件里(这个文件可以指导Perl 6的开发)。2001年[23],工作开始于设计Perl 6,一系列的文件概述了新一代Perl里的改变和设计。它们是作为一期RFC被展示的,而不是一个正式文档。这时,Perl 6的存在还只是一门语言的概述。

Perl 5.8最初于2002年7月18日发布,从此,每年才有一次更新。Perl 5.8的最后一版是5.8.9,发布于2008年12月14日。Perl 5.8改进了Unicode支持,添加了一个新的IO处理机制和新的多线程处理,提高了数字精度,添加了一些新模块[24]

2004年,工作开始于提要——原来的建议文件,但后来变成了Perl 6语言的详述。2005年2月唐凤,开始开发Pugs,一个用Haskell写的Perl 6直译器[25]。这是最初的一个Perl 6实现。这个努力停止于2006年[26]

2007年12月18日,Perl 1.0的20周年纪念日,Perl 5.10.0发布了。Perl 5.10.0包括了显著的新特性,这拉近了Perl 5和6之间的距离。这些特性包括一个switch语句英语switch statement(叫做“given/when”),正则表达式的更新和智能匹配操作符“~~”[27][28]。同时,另一个Perl 6的实现,Rakudo Perl的开发开始了,一起使用Parrot虚拟机开发。从2009年11月开始,Rakudo Perl已经是每月一更新,现在已经是Perl 6的最完整的一个实现了。

Perl 5开发过程中的一次大修改在Perl 5.11;开发社区使用了每月更新的形式,这样就可以提前预知3个月以内的发布日期。

2010年4月12日,Perl 5.12.0发布了。显著的提升包括新的package NAME VERSION语法,Yada Yada操作符(有意地用占位符标记没有实现的代码),默认use strict;(在use 5.012;时)完整的Y2038编译,正则转化重载,DTrace支持,和Unicode5.2[29]。Perl 5.12.3于2011年1月21日发布;它包括了新版的模块和一些文档的改变[30]。版本5.12.4于2011年6月20日发布。

Perl 5.14发布于2011年5月14日。这个分支的最后一版,5.14.2,发布于2011年9月26日。

Perl 5.16发布于2012年5月20日。显著的新特性包括可以指定一个perl的版本来模拟,这允许用户更新perl的版本,但可以运行可能会不兼容的老脚本[31]。Perl 5.16也更新了核心部分来支持Unicode 6.1[31]

名称

Perl原名叫“Pearl”。拉里·沃尔想给这个语言起一个有正面意思的短的名字;他考虑了(并且否定了)字典里每一个3—4个字母的词。他也考虑用他的妻子Gloria的名字命名。沃尔在Perl官方发布之前发现了现有的PEARL语言,并且改变了这个名字[32]

当指代这个语言的时候,名字通常是大写的(Perl),就像专有名词一样。当指代这个直译器本身的时候,这个名字通常是小写的(perl),因为大部分类Unix文件系统都是区分大小写的。在《Programming Perl英语Programming Perl》的第一版发布之前,用perl指代这个语言也很普遍;Randal L. Schwartz英语Randal L. Schwartz排版时将这个语言的名字在书中写成大写的以便理解。后来,这个大小写的区别就成为正规的了[33]

全大写的“PERL”是有争议的,而文档中说明“PERL”是不对的[33],一些核心的社区成员将其视为外行的标志[34]。这个名字偶尔会被视为“Practical Extraction and Report Language”的缩写,就像文档[32]顶端和一些纸质书本说的那样[35]。一些全称被建议作为正式名称,包括沃尔自己的幽默的“Pathologically Eclectic Rubbish Lister”[36]。的确,沃尔要求这个名字启示许多不同的扩展[37]

骆驼标志

 
骆驼标志

Programming Perl》,由奥莱利媒体发布,特色是封面有一张骆驼的图片,因而被称作“骆驼书”[38]。这张骆驼的图片已经成为了Perl非官方的标志和一个黑客的标志,这出现在T恤衫和其它衣服上。

奥莱利擁有此圖像之商標,並且宣稱,唯有在捍衛「符號之完整性」時,才會行使其法律上的權力[39]。奥莱利允許此商標在非商業目的之前提下被使用,並同時供了Programming Republic of Perl的圖像以及Powered by Perl的按鈕圖。[40]Perl的另一個識別符號是羊驼。因为《Intermediate Perl》一书的封面是一只羊驼[41]

洋葱标志

 
洋葱标志

Perl基金会拥有一个可选的标志,一个洋葱,允许它的子站点,Perl Mongers,PerlMonks,Perl.org和其它网站使用[42]

Perl简介

Perl语言的中心思想

Perl语言的中心思想可以集成为一句话「TMTOWTDI」:

There's More Than One Way To Do It.
(不只一种方法來做一件事。)

Perl的作者拉里·沃尔建议可以把这个缩写词念成「Tim Toady」。这句话后来被扩充成:

There's more than one way to do it, but sometimes consistency is not a bad thing either.
(不只一种方法來做一件事,但有时保持一致也不错。)

  • TIMTOWTDIBSCINABTE,发音为“Tim Toady Bicarbonate”[43].

另一个Perl程序员常常想起的Perl俗语是:

Easy things should be easy, and hard things should be possible.
(简单的事情应该是简单的,复杂的事情应该尽可能地变得简单。)

优点

为了实现这样的目标,并且又因为Larry Wall本人也是一个语言学家,他设计Perl语言时使用了很多语言学的思维。相比CPascal这样的“高级”语言而言,Perl语言直接提供泛型變數、动态数组、Hash表等更加便捷的编程元素。Perl具有动态语言的强大灵活的特性,并且还从C/C++、Basic、Pascal等语言中分别借鉴了语法规则,从而提供了许多冗餘语法。使得程序员可以忽略计算机内部資料存储、类型、处理方法、运算规则、甚至内存越界等等的细节,而将思考中心放在所需要的程序逻辑上。就这一点而言,很多Perl程序员认为目前只有Perl、Python泛型语言才能称为“高级”语言,而CPascal甚至C++这些只能称为“中高级”语言而已。可以说,在统一變數类型和掩盖运算细节方面,Perl做得比Python更为出色。

由于从其他语言大量借鉴了语法,使得从其他编程语言转到Perl语言的程序员可以迅速上手写程序并完成任务,这使得Perl语言是一门容易用的语言。

缺点

也正是因为Perl的灵活性和“过度”的冗余语法,也因此获得了仅写(write-only)的“美誉”,因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。

同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。对此,《Learning Perl》一书里建议经常使用Perl编程。

建议的解决方法是在程序裡使用use strict;以及use warnings;,并统一代码风格,使用库,而不是自己使用「硬编码」。Perl同样可以将代码书写得像PythonRuby等语言一样优雅。

Perl的语法

Perl的Hello World程式

下面是一个在標準輸出設備上輸出Hello World的簡單程式,這種程式通常作為開始學習程式語言的第一個範例:

#!/usr/bin/env perl print "Hello, world!\n"; 

如果有perl 5.10以上的版本,也可以这样:

#!/usr/bin/env perl use 5.010; say "Hello, world!"; 

这个程序将输出一行字符串:“Hello, world!”,以及一个换行。

变量

Perl是一种无类型语言(untyped),换句话说,在语言层面上,Perl和大多数编程语言不同,不把变量分成整数字符浮点数等等,而只有一种能接受各种类型数据的“无类型”变量。Perl的变量以$字符开头。例如$a=5;$b="Hello";$c=3.2;$d='\n这里并不换行';都是合法的Perl语句。

Perl中各种变量的运算也很自由,数和含有数的字符串是等效的,可以把数字字符串参与数学计算,也可以反之,让数字参与字符串的构成和操作。

除单个变量(Perl称为标量「Scalar」)之外,Perl还有两种集合类型,分别是数组(Array,用@字符开头)和关联数组(Associative array,或者称为Hash,用%开头。类似C++11STL 无序表「unordered_map」和Python的字典「Dictionary」)。数组可以内含任意可变数目的变量,并以其存储顺序作为索引以完成常数时间的定位;而Hash表,则可以在变量之间建立一一映射,就像字典一样,把不同的变量按照他们的逻辑关系组织起来,并以作为“键”的变量进行索引,完成常数时间的定位。

另外,Perl还有一种特殊的类型,引用(reference),类似于指针,当作标量处理,可以指向标量(含引用)、数组、Hash等任何类型。如:

$foo = \$bar; print $$foo; $foo = \@bar; print @$foo; $foo = \%bar; print %$foo; $foo = \&bar; print $foo->(); print &$foo; 

引用的好处在于,将它传递给函数之后,函数可以修改它指向的变量。而如果传递普通变量,修改的值只在函数内有效。

sub foo { my $var = shift; $$var = '1'; } my $foo = '2'; my $var = \$foo; print $$var; foo ($var); print $foo; 

输出“21”,即foo()内改变了$foo。

判断语句

因为Perl大量的创造冗余的语法,并且从其他语言中大量的借鉴语法,使得Perl的语法极其丰富和灵活。Perl共有下列几种判断语句:

  • if区块
if ($hour > 22) { print "should sleep...\n"; } 
  • if语句
print "hello" if $guest >= 1; 
  • unless区块
unless ($credit > 100) { print "You can not graduate!\n"; } 
  • unless语句
print "eat\n" unless $food == 0; 
  • given/when(语句及区块)
use 5.010; given ($foo) { say 'a' when 'a'; when (/b/) { say 'b'; } #when可以写成语句或区块 default { say 'not match'; } #只可以写成区块。 } 

由于逻辑運算元的作用,还可以写出不用关键字ifunless的判断语句,如常用的打开文件语句:

open DATA, '<', $filename or die "Can't open $filename: $!\n"; 

循环语句

Perl中的循环语句也是非常的丰富。主要有:

Perl自己的for或者foreach循环(两个完全一样):

@group = 1 .. 10; for (@group) { print "$_\n"; } print "$_\n" for @group; foreach (@group) { print "$_\n"; } 

从C语言借鉴来的for循环(又可写作foreach,两个完全一样):

for ($i = 0; $i < 10; $i++) { print "$group[$i]\n"; } 

while循环:

$i=0; while ($i < 10) { print "$group[$i]\n"; $i++; } 

do...while循环:

$i = 0; do { print "$group[$i]\n"; $i++; } while ($i < 10); 

until循环:

$i = 0; until ($i == 10) { print "$group[$i]\n"; $i++; } 

从PASCAL语言借鉴来的do...until循环:

$i = 0; do { print "$group[$i]\n"; $i++; } until ($i == 10); 

甚至还有利用动态语言特性,用map函数也可以做循环:

map { print "$_\n" } @group; 

其实还有其他的循环方式。总而言之,就是TMTOWTDI

Perl的应用

Perl主要应用在Unix平台和网页中(PHPCGI)。Perl拥有海量的模块支持,在解决问题时非常方便。CPAN有很多Perl模块。

以Perl编写的软件

Perl Data Language

Perl Data Language(简称PDL)是Perl的一个外接模块,也是对Perl功能的一个重要拓展。它使得Perl语言可以直接对2至多维的矩阵直接操作,进行快速的矩阵运算,完成基础的Perl所不能完成的运算,大大拓展了Perl的适用范围。所以PDL本身也是很多其他模块的基础。

而且PDL提供了与很多其他软件包的接口,例如FFTW(一个快速傅立叶变换的软件包),又或者是MesaLinux上的OpenGL三维图形渲染包),这些包原来往往仅提供C/C++语言接口。这一功能使PDL成为拓展Perl功能的一个中间层。

Perl的社区文化

Perl诗经

和C語言一樣,在Perl界,難以讀懂的程式碼大賽是個有名的活動。近似難以讀懂的程式碼,但方向不同,Perl Poetry是可以被perl編譯的詩。新的詩經通常會在網站發表。[44]

JAPH

Just another Perl hacker(另一个Perl黑客)是一个和国际C语言混乱代码大赛有着相同精神的社区文化。Perl程序员通过写JAPH代码,来分享自己的编程技术。[45]

競爭對手

因為許多Perl程序的代碼難以閱讀,加上它的面向对象功能被視為不是真正的面向对象(只是模組的模擬),於是很多人拿Perl和其他動態語言來比較。

最常見的比較對象是Python,有人寫了篇文章叫《What's wrong with Perl》[46],指出Perl的缺點,鼓勵別人學Python。著名黑客埃里克·斯蒂芬·雷蒙寫了《Why Python?》[47],該文中一個重要的比較對象就是Perl。《A Byte Of Python》[48]里的《Why Not Perl?》[49]也把Python和Perl比较。

Ruby的作者(松本行弘,Matz)甚至直認他想Ruby作為Perl的後繼者。[50]

Raku(旧名Perl 6)

 
Camelia,Raku项目的标志[51]

2000年开始,拉里·沃尔著手開發Perl 6來作為Perl的後繼,2019年更名為Raku

在Perl的官网介绍中,Raku不是Perl 5的下一个版本,而是与Perl 5并行开发的另一种编程语言[52] Raku更好地支持面向对象,有专用于定义类的語法:

class Foo is Universal { # inherit form Universal has $.member_variable method member_function { print "some string"; } } 

Raku可以明确定义变量类型,当类型不匹配,编译时报错[53]

另外,Raku提供了不同的正则表达式语法,新的语法称作「規則」,并且允许使用者在正则表达式中加入空格等以便阅读,还可以命名一个正则表达式方便调用[54]

Raku中的控制流程和循环的判断条件的括号可选:

if $percent > 100 { say "weird mathematics"; } for 1..3 { # using $_ as loop variable say 2 * $_; } for 1..3 -> $x { # with explicit loop variable say 2 * $x; } while $stuff.is_wrong { $stuff.try_to_make_right; } 

但是如果加入括號,不能緊跟在关键字后面,而要空一格,因为用foo()這樣的形式,编译器识别为调用函数foo,而不管它是不是关键字[55]

if ($hour > 22) { #正確 say 'should sleep...'; } if($hour > 22) { #錯誤 say 'should sleep...'; } 

参考文献

  1. ^ perl 5.36.0 is now available. [2022年6月15日]. 
  2. ^ . dev.perl.org. [2018-12-17]. (原始内容存档于2018-07-24). 
  3. ^ Artistic (页面存档备份,存于互联网档案馆) - file on the Perl 5 git repository
  4. ^ Perl Licensing. dev.perl.org. [2011-01-08]. (原始内容于2011-01-22). 
  5. ^ perl 5.36.0 is now available. www.nntp.perl.org. [2022-05-28]. (原始内容于2022-07-05). 
  6. ^ . www.nntp.perl.org. [2022-03-13]. (原始内容存档于2022-04-11). 
  7. ^ perl 5.37.0 is now available. www.nntp.perl.org. [2022-05-28]. (原始内容于2022-07-05). 
  8. ^ Lapworth, Leo. General Questions About Perl. Perl FAQ. Perl.org. [February 24, 2012]. (原始内容存档于2013-06-22). 
  9. ^ perl(1): Practical Extraction/Report Language - Linux man page. Linux.die.net. [2013-07-23]. (原始内容存档于2013-06-22). 
  10. ^ Perl Core Development - Perl 6. [2006-02-10]. (原始内容于2006-02-07). 
  11. ^ Sheppard, Doug. Beginner's Introduction to Perl. O'Reilly Media. 2000-10-16 [2008-07-27]. (原始内容于2008-06-04). 
  12. ^ Wall, Larry, Tom Christiansen and Jon Orwant. Programming Perl, Third Edition. O'Reilly Media. July 2000. ISBN 0-596-00027-8. 
  13. ^ comp.sources.unix. Google Groups. Google. 1988-02-01 [2011-01-13]. (原始内容于2013-05-10). 
  14. ^ perl.perl5.porters archive. perl.org. [2011-01-13]. (原始内容于2011-05-01). 
  15. ^ perlhist - the Perl history records. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容于2011-01-13). 
  16. ^ . CPAN. [2012-04-14]. (原始内容存档于2011-02-26). 
  17. ^ 17.0 17.1 perl5004delta - what's new for perl5.004. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容于2011-02-27). 
  18. ^ Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen. Perl in a Nutshell, Second Edition. O'Reilly Media. 2002 [2011-01-08]. ISBN 978-0-596-00241-1. 
  19. ^ perl5005delta - what's new for perl5.005. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容于2011-02-03). 
  20. ^ 20.00 20.01 20.02 20.03 20.04 20.05 20.06 20.07 20.08 20.09 20.10 20.11 20.12 Perl Source. www.cpan.org. [2017-06-05]. (原始内容于2017-06-01). 
  21. ^ perl56delta - what's new for perl v5.6.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容于2011-02-02). 
  22. ^ perl56delta - what's new for perl v5.6.x. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容于2010-11-18). 
  23. ^ Wall, Larry. Apocalypse 1: The Ugly, the Bad, and the Good. [2011-01-08]. (原始内容于2010-11-23). 
  24. ^ perl58delta - what is new for perl v5.8.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容于2010-11-21). 
  25. ^ A Plan for Pugs. O'Reilly Media. 2005-03-03 [2011-01-27]. (原始内容存档于2012-09-08). 
  26. ^ Tang, Audrey. Re: How to Implement Perl 6 in Ten Years. PerlMonks. 2010-04-21 [2011-01-03]. (原始内容于2011-05-11). 
  27. ^ perl5100delta - what is new for perl 5.10.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容于2010-12-21). 
  28. ^ perlsyn - Perl syntax. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容于2013-08-26). 
  29. ^ perl5120delta - what is new for perl v5.12.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容于2011-01-04). 
  30. ^ perldelta - what is new for perl v5.12.3. Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容于2011-06-08). 
  31. ^ 31.0 31.1 perldelta - what is new for perl v5.16.0. Perl 5 version 16.0 documentation. search.cpan.org. [2012-05-21]. (原始内容于2012-05-24). 
  32. ^ 32.0 32.1 Richardson, Marjorie. . Linux Journal. 1999-05-01 [2011-01-03]. (原始内容存档于2011-01-26). 
  33. ^ 33.0 33.1 perlfaq1: What's the difference between "perl" and "Perl"?. perldoc.perl.org - Perl 5 version 12.2 documentation. [2012-07-02]. (原始内容于2012-07-12). 
  34. ^ Schwartz, Randal. PERL as shibboleth and the Perl community. PerlMonks. [2007-06-01]. (原始内容于2007-09-27). 
  35. ^ Steve McConnell (2004) Code Complete, 2nd ed., Microsoft Press, p. 65.
  36. ^ Wall, Larry. perl - The Perl language interpreter. Perl 5 version 12.2 documentation. [2011-01-26]. (原始内容于2011-01-20). 
  37. ^ Wall, Larry. Re^7: PERL as shibboleth and the Perl community. PerlMonks. [2011-01-02]. (原始内容于2011-05-11). 
  38. ^ Schwartz, Randal L; Phoenix, Tom; foy, brian. Learning Perl, Third Edition. ISBN 978-0-596-00132-2. 
  39. ^ O'Reilly—The Perl Camel Usage and Trademark Information. [2008-11-12]. (原始内容于2005-12-26). 
  40. ^ Index of /images/perl
  41. ^ Intermediate Perl. [2012-07-03]. (原始内容于2012-06-26). 
  42. ^ . The Perl Foundation. [2011-01-09]. (原始内容存档于2011-05-03). 
  43. ^ . dev411.com. 2009-01-24 [2012-07-03]. (原始内容存档于2012-06-25). 
  44. ^ The Lighter Side of Perl Culture (Part V): Poetry. [2015-11-19]. (原始内容于2015-11-19). 
  45. ^ The Lighter Side of Perl Culture (Part II): JAPH. [2015-11-19]. (原始内容于2015-11-19). 
  46. ^ What's wrong with Perl (页面存档备份,存于互联网档案馆
  47. ^ Why Python? (页面存档备份,存于互联网档案馆
  48. ^ A Byte Of Python (页面存档备份,存于互联网档案馆
  49. ^ Why Not Perl? (页面存档备份,存于互联网档案馆
  50. ^ 「我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。」--摘錄自O'Reilly訪問Matz。 (页面存档备份,存于互联网档案馆
  51. ^ . The Perl 6 Project. [2011-02-27]. (原始内容存档于2011-02-21). 
  52. ^ About Perl. [2015-11-19]. (原始内容于2015-11-06) (英语). "Perl" is a family of languages, "Perl 6" is part of the family, but it is a separate language which has its own development team. 
  53. ^ Perl 5 to 6. [2012-07-04]. (原始内容于2012-07-03). 
  54. ^ Perl 5 to 6. [2012-07-04]. (原始内容于2012-07-03). 
  55. ^ Perl 5 to 6. [2012-07-04]. (原始内容于2012-07-03). 

參見

外部链接

中文資源、社群

  • (繁體中文)
  • (繁體中文)
  • (繁體中文)
  • 香港Perl推廣组(繁體中文)
  • (简体中文)
  • 中国Perl协会的wiki(简体中文)

英文資源、社群

perl, 是高階, 通用, 直譯式, 動態的程式语言家族, 最初设计者拉里, 沃尔為了讓在unix上進行報表處理的工作變得更方便, 決定開發一個通用的腳本語言, 而在1987年12月18日發表, 目前, 语言家族包含两个分支, 5以及, 雖然不是正式的首字母縮略詞, 但仍有各種各樣的逆向首字母缩略词, 包括, 實用的提取和報告語言, 编程范型多重编程范式, 函數, 指令式, 面向对象, 類別為基, 反射, 过程式, 事件驅動, 泛型設計者拉里, 沃尔實作者拉里, 沃尔发行时间1987年12月18日, 35年前, . Perl是高階 通用 直譯式 動態的程式语言家族 最初设计者拉里 沃尔為了讓在UNIX上進行報表處理的工作變得更方便 決定開發一個通用的腳本語言 而在1987年12月18日發表 目前 Perl语言家族包含两个分支Perl 5以及Perl 6 雖然Perl不是正式的首字母縮略詞 8 但仍有各種各樣的逆向首字母缩略词 包括 實用的提取和報告語言 9 Perl编程范型多重编程范式 函數 指令式 面向对象 類別為基 反射 过程式 事件驅動 泛型設計者拉里 沃尔實作者拉里 沃尔发行时间1987年12月18日 35年前 1987 12 18 目前版本5 36 0 2022年5月28日 穩定版本 1 型態系統动态實作語言C语言作業系統跨平台許可證艺术许可协 1 0 2 3 GNU通用公共许可证 4 文件扩展名 pl pm t pod網站www wbr perl wbr org啟發語言AWK C语言 C Lisp Pascal sed Smalltalk 80 Unix shell影響語言CoffeeScript ECMAScript Groovy JavaScript Julia LPC Perl 6 PHP Python Ruby Windows PowerShell維基教科書中有關Perl Programming的文本Perl借用了C sed awk shell脚本 Lisp以及很多其他程式語言的特性 其中最重要的特性是Perl内部集成了正则表达式的功能 以及巨大的第三方代码库CPAN 2000年开始 拉里 沃尔著手開發Perl 6來作為Perl的後繼 Perl 6語言的語法有很多轉變 也被視為Perl家族中的另一個語言 Perl 6於2019年更名為Raku 10 Perl语言应用广泛 涵盖CGI 图形编程 系统管理 网络编程 金融 生物等领域 由于其灵活性 Perl被称为脚本语言中的瑞士军刀 11 鉴于Perl在实际工程应用中广泛使用 MacOS Linux FreeBSD等现代化操作系统默认安装Perl 目录 1 历史 1 1 早期版本 1 2 早期的Perl 5 1 3 2000年至今 1 4 名称 1 5 骆驼标志 1 5 1 洋葱标志 2 Perl简介 2 1 Perl语言的中心思想 2 2 优点 2 3 缺点 3 Perl的语法 3 1 Perl的Hello World程式 3 2 变量 3 3 判断语句 3 4 循环语句 4 Perl的应用 4 1 以Perl编写的软件 4 2 Perl Data Language 5 Perl的社区文化 5 1 Perl诗经 5 2 JAPH 6 競爭對手 7 Raku 旧名Perl 6 8 参考文献 9 參見 10 外部链接 10 1 中文資源 社群 10 2 英文資源 社群历史 编辑早期版本 编辑 拉里 沃尔在1987年开始写作Perl 那时他正在Unisys当程序员 12 并且在1987年12月18日把1 0版本发布到了comp sources misc新闻组 13 这个语言在接下来的几年内很快地发展起来 沃尔最早的确把这个语言称为 Pearl 珍珠 因为他希望自己开发的语言有一个吉利的名字而且要尽量短小好记 他甚至声称早已考虑过所有三个及四个字母的词汇 以及自己妻子的名字Gloria 然而另一门语言PEARL早已存在 为了防止混淆 沃尔才把它改名Perl Perl 2 于1988年发布 特色是有一个更好的正则表达式引擎 Perl 3 于1989年发布 添加了对二进制数据流的支持 从前 Perl唯一的文档是一个逐渐变长的手册页 在1991年 Programming Perl 被许多Perl程序员因封面称为 骆驼书 出版了 而且变成了一个真正的Perl语言的参考资料 同时 Perl版本号变成了4 不是因为这个语言的重大改变 而是因为这本书的特殊意义 早期的Perl 5 编辑 Perl 4的一系列维护的版本 最后一版是1993年的Perl 4 036 那时 沃尔废弃了Perl 4 开始开发Perl 5 Perl 5的最初始设计持续到了1994年 perl5 porters 邮件列表于1994年5月为了共同移植Perl 5而建立 这将主要的论坛留给了Perl 5的开发 维护 和移植 14 Perl 5 000于1994年10月17日发布 15 这是一个几乎完全重写了的解释器 而且它给这个语言添加了很多新的特性 包括对象 引用 局部变量 和模块 很重要地 模块提供了一个不用修改直译器就可以扩展语言的方法 这使得核心的直译器非常稳定 即使它允许一般的Perl程序员添加新的语言特性 从此 Perl 5的开发就活跃起来了 Perl 5 001于1995年3月13日发布 Perl 5 002于1996年2月29日发布 带有参数类型的特性 这允许模块的作者写出像Perl内部命令那样智能的子程序 Perl 5 003于1996年6月25日作为一个安全更新的版本发布 Perl 5历史中最重要的事件之一是支持了模块 在1995年10月26日 CPAN 一个发布Perl模块的网站 建立了 截至2015年11月 它已经有超过12457个作者写的157794多个模块了 16 Perl 5 004于1997年5月15日发布 添加了UNIVERSAL包 这给了Perl一个所有的类的基础和要求使用模块的特定版本的能力 另一个重要的开发是包括了CGI pm模块 17 有助于Perl发展为一个CGI脚本语言 18 Perl现在也支持在Microsoft Windows和其它一些操作系统下运作 17 Perl 5 005于1998年7月22日发布 这个版本包括了一个更好的正则引擎 一个编译系统 通过B 模块 qr 正则引用操作符 一个基础模块的选集 并且又支持了一些其它的操作系统 包括BeOS 19 2000年至今 编辑 主要版本 最后更新舊版本 不再支援 5 5 2004年2月23日 2004 02 23 20 舊版本 不再支援 5 6 2003年11月15日 2003 11 15 20 舊版本 不再支援 5 8 2008年12月14日 2008 12 14 20 舊版本 不再支援 5 10 2009年8月23日 2009 08 23 20 舊版本 不再支援 5 12 2012年11月10日 2012 11 10 20 舊版本 不再支援 5 14 2013年3月10日 2013 03 10 20 舊版本 不再支援 5 16 2013年3月11日 2013 03 11 20 舊版本 不再支援 5 18 2014年10月2日 2014 10 02 20 舊版本 不再支援 5 20 2015年9月12日 2015 09 12 20 舊版本 不再支援 5 22 2017年7月15日 2017 07 15 20 舊版本 不再支援 5 24 2018年4月14日 2018 04 14 20 舊版本 仍被支援 5 26 2018年4月14日 2018 04 14 20 當前版本 5 28 2018年6月23日 2018 06 23 20 格式 舊版本 舊版本 仍被支援 当前版本 最新预览版本 未来版本Perl 5 6于2000年3月22日发布 大的修改包括64位支持 Unicode字串支持 大文件支持 即 超过2GiB的文件 以及 our 关键字 21 22 在开发Perl 5 6的时候 开发组决定把版本名称作成类似其它开源项目的 在5 005 63版之后 下一个版本变成了5 5 640 计划是开发版本用奇数 稳定版本用偶数 2000年时 拉里 沃尔询问社区对Perl新版本的建议 这个进程的结果在361 RFC 评论请求 文件里 这个文件可以指导Perl 6的开发 2001年 23 工作开始于设计Perl 6 一系列的文件概述了新一代Perl里的改变和设计 它们是作为一期RFC被展示的 而不是一个正式文档 这时 Perl 6的存在还只是一门语言的概述 Perl 5 8最初于2002年7月18日发布 从此 每年才有一次更新 Perl 5 8的最后一版是5 8 9 发布于2008年12月14日 Perl 5 8改进了Unicode支持 添加了一个新的IO处理机制和新的多线程处理 提高了数字精度 添加了一些新模块 24 2004年 工作开始于提要 原来的建议文件 但后来变成了Perl 6语言的详述 2005年2月 唐凤 开始开发Pugs 一个用Haskell写的Perl 6直译器 25 这是最初的一个Perl 6实现 这个努力停止于2006年 26 2007年12月18日 Perl 1 0的20周年纪念日 Perl 5 10 0发布了 Perl 5 10 0包括了显著的新特性 这拉近了Perl 5和6之间的距离 这些特性包括一个switch语句 英语 switch statement 叫做 given when 正则表达式的更新和智能匹配操作符 27 28 同时 另一个Perl 6的实现 Rakudo Perl的开发开始了 一起使用Parrot虚拟机开发 从2009年11月开始 Rakudo Perl已经是每月一更新 现在已经是Perl 6的最完整的一个实现了 Perl 5开发过程中的一次大修改在Perl 5 11 开发社区使用了每月更新的形式 这样就可以提前预知3个月以内的发布日期 2010年4月12日 Perl 5 12 0发布了 显著的提升包括新的package NAME VERSION语法 Yada Yada操作符 有意地用占位符标记没有实现的代码 默认use strict 在use 5 012 时 完整的Y2038编译 正则转化重载 DTrace支持 和Unicode5 2 29 Perl 5 12 3于2011年1月21日发布 它包括了新版的模块和一些文档的改变 30 版本5 12 4于2011年6月20日发布 Perl 5 14发布于2011年5月14日 这个分支的最后一版 5 14 2 发布于2011年9月26日 Perl 5 16发布于2012年5月20日 显著的新特性包括可以指定一个perl的版本来模拟 这允许用户更新perl的版本 但可以运行可能会不兼容的老脚本 31 Perl 5 16也更新了核心部分来支持Unicode 6 1 31 名称 编辑 Perl原名叫 Pearl 拉里 沃尔想给这个语言起一个有正面意思的短的名字 他考虑了 并且否定了 字典里每一个3 4个字母的词 他也考虑用他的妻子Gloria的名字命名 沃尔在Perl官方发布之前发现了现有的PEARL语言 并且改变了这个名字 32 当指代这个语言的时候 名字通常是大写的 Perl 就像专有名词一样 当指代这个直译器本身的时候 这个名字通常是小写的 perl 因为大部分类Unix文件系统都是区分大小写的 在 Programming Perl 英语 Programming Perl 的第一版发布之前 用perl指代这个语言也很普遍 Randal L Schwartz 英语 Randal L Schwartz 排版时将这个语言的名字在书中写成大写的以便理解 后来 这个大小写的区别就成为正规的了 33 全大写的 PERL 是有争议的 而文档中说明 PERL 是不对的 33 一些核心的社区成员将其视为外行的标志 34 这个名字偶尔会被视为 Practical Extraction and Report Language 的缩写 就像文档 32 顶端和一些纸质书本说的那样 35 一些全称被建议作为正式名称 包括沃尔自己的幽默的 Pathologically Eclectic Rubbish Lister 36 的确 沃尔要求这个名字启示许多不同的扩展 37 骆驼标志 编辑 骆驼标志 Programming Perl 由奥莱利媒体发布 特色是封面有一张骆驼的图片 因而被称作 骆驼书 38 这张骆驼的图片已经成为了Perl非官方的标志和一个黑客的标志 这出现在T恤衫和其它衣服上 奥莱利擁有此圖像之商標 並且宣稱 唯有在捍衛 符號之完整性 時 才會行使其法律上的權力 39 奥莱利允許此商標在非商業目的之前提下被使用 並同時供了Programming Republic of Perl的圖像以及Powered by Perl的按鈕圖 40 Perl的另一個識別符號是羊驼 因为 Intermediate Perl 一书的封面是一只羊驼 41 洋葱标志 编辑 洋葱标志 Perl基金会拥有一个可选的标志 一个洋葱 允许它的子站点 Perl Mongers PerlMonks Perl org和其它网站使用 42 Perl简介 编辑Perl语言的中心思想 编辑 Perl语言的中心思想可以集成为一句话 TMTOWTDI There s More Than One Way To Do It 不只一种方法來做一件事 Perl的作者拉里 沃尔建议可以把这个缩写词念成 Tim Toady 这句话后来被扩充成 There s more than one way to do it but sometimes consistency is not a bad thing either 不只一种方法來做一件事 但有时保持一致也不错 TIMTOWTDIBSCINABTE 发音为 Tim Toady Bicarbonate 43 另一个Perl程序员常常想起的Perl俗语是 Easy things should be easy and hard things should be possible 简单的事情应该是简单的 复杂的事情应该尽可能地变得简单 优点 编辑 为了实现这样的目标 并且又因为Larry Wall本人也是一个语言学家 他设计Perl语言时使用了很多语言学的思维 相比C Pascal这样的 高级 语言而言 Perl语言直接提供泛型變數 动态数组 Hash表等更加便捷的编程元素 Perl具有动态语言的强大灵活的特性 并且还从C C Basic Pascal等语言中分别借鉴了语法规则 从而提供了许多冗餘语法 使得程序员可以忽略计算机内部資料存储 类型 处理方法 运算规则 甚至内存越界等等的细节 而将思考中心放在所需要的程序逻辑上 就这一点而言 很多Perl程序员认为目前只有Perl Python等泛型语言才能称为 高级 语言 而C Pascal甚至C 这些只能称为 中高级 语言而已 可以说 在统一變數类型和掩盖运算细节方面 Perl做得比Python更为出色 由于从其他语言大量借鉴了语法 使得从其他编程语言转到Perl语言的程序员可以迅速上手写程序并完成任务 这使得Perl语言是一门容易用的语言 缺点 编辑 也正是因为Perl的灵活性和 过度 的冗余语法 也因此获得了仅写 write only 的 美誉 因为Perl程序可以写得很随意 例如 变量不经声明就可以直接使用 但是可能少写一些字母就会得到意想不到的结果 而不报错 许多Perl程序的代码令人难以阅读 实现相同功能的程序代码长度可以相差十倍百倍 这就令程序的维护者 甚至是编写者 难以维护 同样的 因为Perl这样随意的特点 可能会导致一些Perl程序员遗忘语法 以至于不得不经常查看Perl手册 对此 Learning Perl 一书里建议经常使用Perl编程 建议的解决方法是在程序裡使用use strict 以及use warnings 并统一代码风格 使用库 而不是自己使用 硬编码 Perl同样可以将代码书写得像Python或Ruby等语言一样优雅 Perl的语法 编辑Perl的Hello World程式 编辑 下面是一个在標準輸出設備上輸出Hello World的簡單程式 這種程式通常作為開始學習程式語言的第一個範例 usr bin env perl print Hello world n 如果有perl 5 10以上的版本 也可以这样 usr bin env perl use 5 010 say Hello world 这个程序将输出一行字符串 Hello world 以及一个换行 变量 编辑 Perl是一种无类型语言 untyped 换句话说 在语言层面上 Perl和大多数编程语言不同 不把变量分成整数 字符 浮点数等等 而只有一种能接受各种类型数据的 无类型 变量 Perl的变量以 字符开头 例如 a 5 b Hello c 3 2 d n这里并不换行 都是合法的Perl语句 Perl中各种变量的运算也很自由 数和含有数的字符串是等效的 可以把数字字符串参与数学计算 也可以反之 让数字参与字符串的构成和操作 除单个变量 Perl称为标量 Scalar 之外 Perl还有两种集合类型 分别是数组 Array 用 字符开头 和关联数组 Associative array 或者称为Hash 用 开头 类似C 11的STL 无序表 unordered map 和Python的字典 Dictionary 数组可以内含任意可变数目的变量 并以其存储顺序作为索引以完成常数时间的定位 而Hash表 则可以在变量之间建立一一映射 就像字典一样 把不同的变量按照他们的逻辑关系组织起来 并以作为 键 的变量进行索引 完成常数时间的定位 另外 Perl还有一种特殊的类型 引用 reference 类似于指针 当作标量处理 可以指向标量 含引用 数组 Hash等任何类型 如 foo bar print foo foo bar print foo foo bar print foo foo amp bar print foo gt print amp foo 引用的好处在于 将它传递给函数之后 函数可以修改它指向的变量 而如果传递普通变量 修改的值只在函数内有效 sub foo my var shift var 1 my foo 2 my var foo print var foo var print foo 输出 21 即foo 内改变了 foo 判断语句 编辑 因为Perl大量的创造冗余的语法 并且从其他语言中大量的借鉴语法 使得Perl的语法极其丰富和灵活 Perl共有下列几种判断语句 if区块if hour gt 22 print should sleep n if语句print hello if guest gt 1 unless区块unless credit gt 100 print You can not graduate n unless语句print eat n unless food 0 given when 语句及区块 use 5 010 given foo say a when a when b say b when可以写成语句或区块 default say not match 只可以写成区块 由于逻辑運算元的作用 还可以写出不用关键字if或unless的判断语句 如常用的打开文件语句 open DATA lt filename or die Can t open filename n 循环语句 编辑 Perl中的循环语句也是非常的丰富 主要有 Perl自己的for或者foreach循环 两个完全一样 group 1 10 for group print n print n for group foreach group print n 从C语言借鉴来的for循环 又可写作foreach 两个完全一样 for i 0 i lt 10 i print group i n while循环 i 0 while i lt 10 print group i n i do while循环 i 0 do print group i n i while i lt 10 until循环 i 0 until i 10 print group i n i 从PASCAL语言借鉴来的do until循环 i 0 do print group i n i until i 10 甚至还有利用动态语言特性 用map函数也可以做循环 map print n group 其实还有其他的循环方式 总而言之 就是TMTOWTDI Perl的应用 编辑Perl主要应用在Unix平台和网页中 PHP CGI Perl拥有海量的模块支持 在解决问题时非常方便 CPAN有很多Perl模块 以Perl编写的软件 编辑 Bugzilla Movable Type TWiki 英语 TWiki Frozen BubblePerl Data Language 编辑 Perl Data Language 简称PDL 是Perl的一个外接模块 也是对Perl功能的一个重要拓展 它使得Perl语言可以直接对2至多维的矩阵直接操作 进行快速的矩阵运算 完成基础的Perl所不能完成的运算 大大拓展了Perl的适用范围 所以PDL本身也是很多其他模块的基础 而且PDL提供了与很多其他软件包的接口 例如FFTW 一个快速傅立叶变换的软件包 又或者是Mesa Linux上的OpenGL三维图形渲染包 这些包原来往往仅提供C C 语言接口 这一功能使PDL成为拓展Perl功能的一个中间层 Perl的社区文化 编辑Perl诗经 编辑 和C語言一樣 在Perl界 難以讀懂的程式碼大賽是個有名的活動 近似難以讀懂的程式碼 但方向不同 Perl Poetry是可以被perl編譯的詩 新的詩經通常會在Perl Monks網站發表 44 JAPH 编辑 Just another Perl hacker 另一个Perl黑客 是一个和国际C语言混乱代码大赛有着相同精神的社区文化 Perl程序员通过写JAPH代码 来分享自己的编程技术 45 競爭對手 编辑因為許多Perl程序的代碼難以閱讀 加上它的面向对象功能被視為不是真正的面向对象 只是模組的模擬 於是很多人拿Perl和其他動態語言來比較 最常見的比較對象是Python 有人寫了篇文章叫 What s wrong with Perl 46 指出Perl的缺點 鼓勵別人學Python 著名黑客埃里克 斯蒂芬 雷蒙寫了 Why Python 47 該文中一個重要的比較對象就是Perl A Byte Of Python 48 里的 Why Not Perl 49 也把Python和Perl比较 Ruby的作者 松本行弘 Matz 甚至直認他想Ruby作為Perl的後繼者 50 Raku 旧名Perl 6 编辑 Camelia Raku项目的标志 51 主条目 Raku 2000年开始 拉里 沃尔著手開發Perl 6來作為Perl的後繼 2019年更名為Raku 在Perl的官网介绍中 Raku不是Perl 5的下一个版本 而是与Perl 5并行开发的另一种编程语言 52 Raku更好地支持面向对象 有专用于定义类的語法 class Foo is Universal inherit form Universal has member variable method member function print some string Raku可以明确定义变量类型 当类型不匹配 编译时报错 53 另外 Raku提供了不同的正则表达式语法 新的语法称作 規則 并且允许使用者在正则表达式中加入空格等以便阅读 还可以命名一个正则表达式方便调用 54 Raku中的控制流程和循环的判断条件的括号可选 if percent gt 100 say weird mathematics for 1 3 using as loop variable say 2 for 1 3 gt x with explicit loop variable say 2 x while stuff is wrong stuff try to make right 但是如果加入括號 不能緊跟在关键字后面 而要空一格 因为用foo 這樣的形式 编译器识别为调用函数foo 而不管它是不是关键字 55 if hour gt 22 正確 say should sleep if hour gt 22 錯誤 say should sleep 参考文献 编辑 perl 5 36 0 is now available 2022年6月15日 The Artistic License dev perl org dev perl org 2018 12 17 原始内容存档于2018 07 24 Artistic 页面存档备份 存于互联网档案馆 file on the Perl 5 git repository Perl Licensing dev perl org 2011 01 08 原始内容存档于2011 01 22 perl 5 36 0 is now available www nntp perl org 2022 05 28 原始内容存档于2022 07 05 Perl 5 34 1 is now available www nntp perl org 2022 03 13 原始内容存档于2022 04 11 perl 5 37 0 is now available www nntp perl org 2022 05 28 原始内容存档于2022 07 05 Lapworth Leo General Questions About Perl Perl FAQ Perl org February 24 2012 原始内容存档于2013 06 22 perl 1 Practical Extraction Report Language Linux man page Linux die net 2013 07 23 原始内容存档于2013 06 22 Perl Core Development Perl 6 2006 02 10 原始内容存档于2006 02 07 Sheppard Doug Beginner s Introduction to Perl O Reilly Media 2000 10 16 2008 07 27 原始内容存档于2008 06 04 Wall Larry Tom Christiansen and Jon Orwant Programming Perl Third Edition O Reilly Media July 2000 ISBN 0 596 00027 8 comp sources unix Google Groups Google 1988 02 01 2011 01 13 原始内容存档于2013 05 10 perl perl5 porters archive perl org 2011 01 13 原始内容存档于2011 05 01 perlhist the Perl history records Perl 5 version 12 2 documentation perldoc perl org 2011 01 21 原始内容存档于2011 01 13 CPAN CPAN 2012 04 14 原始内容存档于2011 02 26 17 0 17 1 perl5004delta what s new for perl5 004 Perl 5 version 12 2 documentation perldoc perl org 2011 01 08 原始内容存档于2011 02 27 Patwardhan Nathan Siever Ellen Spainhour Stephen Perl in a Nutshell Second Edition O Reilly Media 2002 2011 01 08 ISBN 978 0 596 00241 1 perl5005delta what s new for perl5 005 Perl 5 version 12 2 documentation perldoc perl org 2011 01 21 原始内容存档于2011 02 03 20 00 20 01 20 02 20 03 20 04 20 05 20 06 20 07 20 08 20 09 20 10 20 11 20 12 Perl Source www cpan org 2017 06 05 原始内容存档于2017 06 01 perl56delta what s new for perl v5 6 0 Perl 5 version 12 2 documentation perldoc perl org 2011 01 21 原始内容存档于2011 02 02 perl56delta what s new for perl v5 6 x Perl 5 version 12 2 documentation perldoc perl org 2011 01 21 原始内容存档于2010 11 18 Wall Larry Apocalypse 1 The Ugly the Bad and the Good 2011 01 08 原始内容存档于2010 11 23 perl58delta what is new for perl v5 8 0 Perl 5 version 12 2 documentation perldoc perl org 2011 01 21 原始内容存档于2010 11 21 A Plan for Pugs O Reilly Media 2005 03 03 2011 01 27 原始内容存档于2012 09 08 Tang Audrey Re How to Implement Perl 6 in Ten Years PerlMonks 2010 04 21 2011 01 03 原始内容存档于2011 05 11 perl5100delta what is new for perl 5 10 0 Perl 5 version 12 2 documentation perldoc perl org 2011 01 08 原始内容存档于2010 12 21 perlsyn Perl syntax Perl 5 version 12 2 documentation perldoc perl org 2011 01 21 原始内容存档于2013 08 26 perl5120delta what is new for perl v5 12 0 Perl 5 version 12 2 documentation perldoc perl org 2011 01 08 原始内容存档于2011 01 04 perldelta what is new for perl v5 12 3 Perl 5 version 12 2 documentation perldoc perl org 2011 01 08 原始内容存档于2011 06 08 31 0 31 1 perldelta what is new for perl v5 16 0 Perl 5 version 16 0 documentation search cpan org 2012 05 21 原始内容存档于2012 05 24 32 0 32 1 Richardson Marjorie Larry Wall the Guru of Perl Linux Journal 1999 05 01 2011 01 03 原始内容存档于2011 01 26 33 0 33 1 perlfaq1 What s the difference between perl and Perl perldoc perl org Perl 5 version 12 2 documentation 2012 07 02 原始内容存档于2012 07 12 Schwartz Randal PERL as shibboleth and the Perl community PerlMonks 2007 06 01 原始内容存档于2007 09 27 Steve McConnell 2004 Code Complete 2nd ed Microsoft Press p 65 Wall Larry perl The Perl language interpreter Perl 5 version 12 2 documentation 2011 01 26 原始内容存档于2011 01 20 Wall Larry Re 7 PERL as shibboleth and the Perl community PerlMonks 2011 01 02 原始内容存档于2011 05 11 Schwartz Randal L Phoenix Tom foy brian Learning Perl Third Edition ISBN 978 0 596 00132 2 使用 accessdate 需要含有 url 帮助 O Reilly The Perl Camel Usage and Trademark Information 2008 11 12 原始内容存档于2005 12 26 Index of images perl Intermediate Perl 2012 07 03 原始内容存档于2012 06 26 Perl Trademark The Perl Foundation 2011 01 09 原始内容存档于2011 05 03 Can EPO or TPF tame TIMTOWTDI dev411 com 2009 01 24 2012 07 03 原始内容存档于2012 06 25 The Lighter Side of Perl Culture Part V Poetry 2015 11 19 原始内容存档于2015 11 19 The Lighter Side of Perl Culture Part II JAPH 2015 11 19 原始内容存档于2015 11 19 What s wrong with Perl 页面存档备份 存于互联网档案馆 Why Python 页面存档备份 存于互联网档案馆 A Byte Of Python 页面存档备份 存于互联网档案馆 Why Not Perl 页面存档备份 存于互联网档案馆 我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了 摘錄自O Reilly訪問Matz 页面存档备份 存于互联网档案馆 Perl 6 The Perl 6 Project 2011 02 27 原始内容存档于2011 02 21 About Perl 2015 11 19 原始内容存档于2015 11 06 英语 Perl is a family of languages Perl 6 is part of the family but it is a separate language which has its own development team Perl 5 to 6 2012 07 04 原始内容存档于2012 07 03 Perl 5 to 6 2012 07 04 原始内容存档于2012 07 03 Perl 5 to 6 2012 07 04 原始内容存档于2012 07 03 參見 编辑CPAN Perl 6 Raku Parrot虚拟机外部链接 编辑Perl com 页面存档备份 存于互联网档案馆 O REILLY Perl org 页面存档备份 存于互联网档案馆 Perl 6的開發網頁 页面存档备份 存于互联网档案馆 CPAN Comprehensive Perl Archive Network 页面存档备份 存于互联网档案馆 Perl程式的集中地 CPAN检索 页面存档备份 存于互联网档案馆 dmoz on Perl Perl Mongers 页面存档备份 存于互联网档案馆 全球各地的使用者組織 Perl Monks 页面存档备份 存于互联网档案馆 一个很活跃的Perl社区 ActiveState 页面存档备份 存于互联网档案馆 Microsoft Windows上的Perl Strawberry Perl 页面存档备份 存于互联网档案馆 由Perl社群所提供之Microsoft Windows版Perl Perl6 Perl5 Differences中文資源 社群 编辑 Perl Taiwan 繁體中文 Perl TW Planet 繁體中文 Perl學習手札 繁體中文 香港Perl推廣组 繁體中文 中国Perl协会 简体中文 中国Perl协会的wiki 简体中文 英文資源 社群 编辑 GB18030源码过滤软件 页面存档备份 存于互联网档案馆 英文 GBK源码过滤软件 页面存档备份 存于互联网档案馆 英文 Big5Plus源碼過濾軟件 页面存档备份 存于互联网档案馆 英文 EUC TW源碼過濾軟件 页面存档备份 存于互联网档案馆 英文 Big5 HKSCS源碼過濾軟件 页面存档备份 存于互联网档案馆 英文 取自 https zh wikipedia org w index php title Perl amp oldid 73585028, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。