Perl 是高階 、通用 、直譯式 、動態 的程式语言家族 。最初设计者拉里·沃尔 為了讓在UNIX 上進行報表處理的工作變得更方便,決定開發一個通用的腳本語言 ,而在1987年12月18日發表。目前,Perl语言家族包含两个分支Perl 5以及Perl 6 。雖然Perl不是正式的首字母縮略詞[ 8] ,但仍有各種各樣的逆向首字母缩略词 ,包括“實用的提取和報告語言”。[ 9]
Perl借用了C 、sed 、awk 、shell 脚本、Lisp 以及很多其他程式語言的特性。其中最重要的特性是Perl内部集成了正则表达式 的功能,以及巨大的第三方代码库CPAN 。
2000年开始,拉里·沃尔 著手開發Perl 6 來作為Perl的後繼,Perl 6語言的語法有很多轉變,也被視為Perl家族中的另一個語言(Perl 6於2019年更名為Raku )。[ 10]
Perl语言应用广泛,涵盖CGI 、图形编程、系统管理、网络编程、金融、生物等领域。由于其灵活性,Perl被称为脚本语言 中的瑞士军刀 。[ 11]
历史
早期版本
拉里·沃尔 在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年至今
主要版本
最后更新[ 20]
舊版本,不再支援: 5.5
2004年2月23日 (2004-02-23 )
舊版本,不再支援: 5.6
2003年11月15日 (2003-11-15 )
舊版本,不再支援: 5.8
2008年12月14日 (2008-12-14 )
舊版本,不再支援: 5.10
2009年8月23日 (2009-08-23 )
舊版本,不再支援: 5.12
2012年11月10日 (2012-11-10 )
舊版本,不再支援: 5.14
2013年3月10日 (2013-03-10 )
舊版本,不再支援: 5.16
2013年3月11日 (2013-03-11 )
舊版本,不再支援: 5.18
2014年10月2日 (2014-10-02 )
舊版本,不再支援: 5.20
2015年9月12日 (2015-09-12 )
舊版本,不再支援: 5.22
2017年7月15日 (2017-07-15 )
舊版本,不再支援: 5.24
2018年4月14日 (2018-04-14 )
舊版本,不再支援: 5.26
2018年11月29日 (2018-11-29 )
舊版本,不再支援: 5.28
2020年6月1日 (2020-06-01 )
舊版本,不再支援: 5.30
2020年6月1日 (2020-06-01 )
舊版本,不再支援: 5.32
2021年1月23日 (2021-01-23 )
舊版本,不再支援: 5.34
2023年11月29日 (2023-11-29 )
舊版本,仍被支援: 5.36
2023年11月29日 (2023-11-29 )
當前版本: 5.38
2023年11月29日 (2023-11-29 )
格式: 舊版本 舊版本,仍被支援 当前版本 最新预览版本 未来版本
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语句 (叫做“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 支持,和Unicode 5.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 》的第一版发布之前,用perl 指代这个语言也很普遍;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 = \& 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 ( $hour > 22 ) {
print "should sleep...\n" ;
}
print "hello" if $guest >= 1 ;
unless ( $credit > 100 ) {
print "You can not graduate!\n" ;
}
print "eat\n" unless $food == 0 ;
use 5.010 ;
given ( $foo )
{
say 'a' when 'a' ;
when ( /b/ ) { say 'b' ; } #when可以写成语句或区块
default { say 'not match' ; } #只可以写成区块。
}
由于逻辑 運算元的作用,还可以写出不用关键字 if 或unless 的判断语句,如常用的打开文件语句:
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 平台和网页中(PHP ,CGI )。Perl拥有海量的模块 支持,在解决问题时非常方便。CPAN 有很多Perl模块。
以Perl编写的软件
Perl 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編譯的詩。新的詩經通常會在[1] (页面存档备份 ,存于互联网档案馆 )網站發表。[ 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]
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...' ;
}
参考文献
^ "perl v5.40.0 is now available" ; 作者姓名字符串: Graham Knop; 出版日期: 2024年6月9日; 检索日期: 2024年6月10日.
^ 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).
^ Perl Source . cpan.org. [2023-11-26 ] . (原始内容存档 于2024-05-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).
^ 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 .
^ 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).
參見
外部链接