Perl

编程范型| 多重编程范式：函數、指令式、面向对象 (類別為基)、反射、过程式、事件驅動、泛型
設計者| 拉里·沃尔
實作者| 拉里·沃尔
发行时间| 1987年12月18日，​37年前​（1987-12-18）
当前版本|

* 5.42.0（2025年7月3日；穩定版本）[1]

型態系統| 动态
實作語言| C语言
操作系统| 跨平台
許可證| 艺术许可协 1.0[2][3]
GNU通用公共许可证[4]
文件扩展名| .pl, .pm, .t, .pod
網站| www.perl.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是高階、通用、直譯式、動態的程式语言家族。最初设计者拉里·沃尔為了讓在UNIX上進行報表處理的工作變得更方便，決定開發一個通用的腳本語言，而在1987年12月18日發表。目前，Perl语言家族包含两个分支Perl 5以及Raku。

关于Perl名字的由来，有很多说法。雖然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具有优秀的跨平台特性。Perl现在支持在Microsoft Windows、苹果公司的MacOS、GNU/Linux和其它一些操作系统下运作[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语句（英语：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语言，于是改成了现在Perl这个名字[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 = \�r; print %$foo;
$foo = \&bar; 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'; } #只可以写成区块。

由于逻辑運算元的作用，还可以写出不用关键字`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; #每行打印group里的一个元素

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

## Perl的应用

[编辑]

Perl使用非常广泛。在Unix、GNU/Linux和macOS中，Perl是内置的系统脚本工具。Perl曾经在网页中（PHP，CGI）广泛使用。Perl拥有海量的模块支持，在解决问题时，可以直接安装使用，非常方便。截止2025年2月2日，CPAN上发布了大约266,924个Perl模块。

### 以Perl编写的软件

[编辑]

* Bugzilla
* Movable Type
* TWiki（英语：TWiki）
* Frozen Bubble

### 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]

## 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 > 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 v5.42.0 is now available!. 2025年7月3日  [2025年7月3日].
2. ^ The "Artistic License" - dev.perl.org. 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. ^ Perl 5.34.1 is now available!. 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.  [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. Programming Perl. Beijing; Cambridge, Mass.: O'Reilly. 2000  [2025-03-29]. ISBN 978-0-596-00027-1.
13. ^ comp.sources.unix. 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. 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. ^ Perl Source. cpan.org.  [2023-11-26]. （原始内容存档于2024-05-21）.
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. Larry Wall, the Guru of Perl. 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.  使用`|accessdate=`需要含有`|url=` (帮助)
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. ^ Perl Trademark. The Perl Foundation.  [2011-01-09]. （原始内容存档于2011-05-03）.
43. ^ Can EPO (or TPF) tame TIMTOWTDI?. 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?.  [2025-03-29]. （原始内容存档于2002-02-08）.
48. ^ A Byte of Python. Swaroop, The Dreamer. 2018-04-28  [2025-03-29]. （原始内容存档于2024-09-26） （美国英语）.
49. ^ Why Not Perl? （页面存档备份，存于互联网档案馆）
50. ^ 「我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。」--摘錄自O'Reilly訪問Matz。 （页面存档备份，存于互联网档案馆）
51. ^ Perl 6. 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）.

## 參見

[编辑]

* CPAN
* Raku（Perl 6）
* 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源碼過濾軟件 （页面存档备份，存于互联网档案馆）（英文）

* 查
* 论
* 编

编程语言

范型|

| 过程式|

* FORTRAN
* COBOL
* JOVIAL
* ALGOL 60
* JOSS（英语：JOSS）
* BASIC
* PL/I
* MUMPS（英语：MUMPS）
* ALGOL 68
* Forth
* Pascal
* Turbo Pascal
* C
* Modula-2
* Ada 83
* occam
* Oberon
* Go
* Ballerina（英语：Ballerina (programming language)）

|

面向对象|

* Simula 67
* Smalltalk
* Objective-C
* Eiffel
* Object Pascal
* Delphi
* Self
* CLOS
* Visual Basic
* Gambas
* Ada 95
* Java
* C#
* Vala
* Crystal（英语：Crystal (programming language)）

多范型|

* C++
* Modula-3
* Dylan
* Python
* Lua
* JavaScript
* Ruby
* D
* Factor
* Scala
* F#
* Haxe
* Nim
* Chapel（英语：Chapel (programming language)）
* Rust
* Kotlin
* Dart
* Swift
* Zig
* Ring（英语：Ring (programming language)）
* V（英语：V (programming language)）
* Mojo
* Carbon

函数式|

* LISP
* Scheme
* Common Lisp
* Clojure
* Logo
* APL/`J`
* ML
* Standard ML
* OCaml
* Erlang
* Elixir
* Haskell
* SAC
* Agda
* Idris
* jq
* Gleam（英语：Gleam (programming language)）

逻辑式|

* Prolog
* Datalog
* Mercury
* AnsProlog
* ProbLog（英语：ProbLog）

脚本语言|

| 动态语言|

* SNOBOL
* Icon
* REXX
* Perl
* Raku
* Tcl/Tk
* Python
* Lua
* Ruby
* PHP
* Hack
* CFML（英语：ColdFusion Markup Language）
* REBOL
* Red（英语：Red (programming language)）
* Io
* Julia
* jq

|

Shell语言|

* Unix shell
* sh/ash/dash
* csh/tcsh
* ksh
* bash
* zsh
* rc（英语：rc (Unix shell)）
* AWK
* PowerShell

ECMA-262|

* ECMAScript
* JavaScript
* TypeScript
* CoffeeScript/LiveScript（英语：LiveScript (programming language)）
* Elm
* PureScript
* Reason
* Bosque（英语：Bosque (programming language)）

特定平台|

| .NET|

* C#
* C++/CLI
* F#
* PowerShell
* VB.NET
* Small Basic

|

JVM|

* Java
* AspectJ（英语：AspectJ）
* Scala
* Clojure
* Groovy
* Kotlin

特定领域|

| 科学计算|

* Speakeasy（英语：Speakeasy (computational environment)）
* IDL
* GDL
* Maxima
* Maple
* MATLAB
* Octave
* Scilab
* Wolfram
* R
* Yorick（英语：Yorick (programming language)）
* SageMath
* Julia

|

GPU计算|

* Cg/HLSL
* GLSL/GLSL ES
* Brook（英语：BrookGPU）
* CUDA/PTX（英语：Parallel Thread Execution）
* OpenCL/SPIR-V（英语：Standard Portable Intermediate Representation）
* Futhark
* WGSL（英语：WebGPU Shading Language）

数据查询|

* CODASYL（英语：CODASYL）
* SQL
* PL/SQL
* T-SQL
* SQL/PSM（英语：SQL/PSM）
* xBase（英语：xBase）
* XPath
* XQuery（英语：XQuery）
* GraphQL

可视化|

* Prograph（英语：Prograph）
* Simulink
* LabVIEW
* Orange（英语：Orange (software)）
* KNIME（英语：KNIME）
* Scratch
* Snap!
* App Inventor
* Power Fx

传媒设计|

* SuperCollider
* Pure Data
* AviSynth
* Processing
* ChucK

其它|

* 汇编语言
* APT（英语：APT (programming language)）
* GPSS（英语：GPSS）
* CLIPS（英语：CLIPS）
* AMPL
* dc
* sed
* yacc
* make
* PostScript
* XSLT
* LLVM IR
* WebAssembly
* 深奥的编程语言

* 目录
* 列表
* 历史
* 比较（英语：Comparison of programming languages）
* 时间线

规范控制数据库：各地 |

* 西班牙
* 法国
* BnF data
* 德国
* 以色列
* 美国
* 捷克

|

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板