パール
Perl は、高レベル、汎用、リテラル、および動的プログラミング言語のファミリーです。UNIXでのレポート処理を容易にするために、オリジナルの設計者Larry Wall はユニバーサルスクリプト言語を開発することを決定し、1987 年12 月18 日に公開されました。現在、Perl言語ファミリーにはPerl 5とPerl 6の 2 つのブランチが含まれています。Perl は正式な頭字語ではありませんが、「Practical Extraction and Reporting Language」などのさまざまな逆頭字語があります。
パール |
|
複数のプログラミング パラダイム:関数型、命令型、オブジェクト指向 (クラスベース) 、リフレクション、手続き型、イベント駆動型、ジェネリックス |
|
デザイナー |
ラリー・ウォール |
実装者 |
ラリー・ウォール |
1987 年12 月18日_ _ |
|
現行版 |
|
型システム |
動的 |
実装言語 |
C言語 |
オペレーティング·システム |
クロスプラットフォーム |
ライセンス |
アート ライセンシング アソシエーション1.0 |
ファイル拡張子 |
.pl、.pm、.t、.pod |
Webサイト |
|
感動的な言語 |
|
AWK、C言語、C++、Lisp、Pascal、 sed、Smalltalk 80、Unix シェル |
|
言語に影響を与える |
|
CoffeeScript、ECMAScript、Groovy、 |
|
|
Perl は、 C、sed、awk、シェルスクリプト、Lisp 、およびその他の多くのプログラミング言語から機能を借用しています。最も重要な機能は、Perl の正規表現と巨大なサードパーティ コード ライブラリCPANの内部統合です。
2000 年から、ラリー ウォールはPerlの後継としてPerl 6の開発を開始しましたが、Perl 6言語の構文には多くの変更があり、 Perlファミリーの別の言語ともみなされています( Perl 6は2019 年にrakuに名前変更されました)。
Perl言語は、CGI、グラフィックス プログラミング、システム管理、ネットワーク プログラミング、金融、生物学などの分野で広く使用されています。Perl はその柔軟性により、スクリプト言語のスイス アーミー ナイフと呼ばれています。
Perl が実際のエンジニアリング アプリケーションで広く使用されているという事実を考慮して、 MacOS、Linux、FreeBSD、その他の最新のオペレーティング システムでは、デフォルトでPerlがインストールされます。
歴史
以前のバージョン
Larry Wall は、 Unisysでプログラマとして働いていた1987 年にPerlを書き始め、1987 年12 月18 日にcomp.sources.miscニュースグループにバージョン1.0をリリースしました。この言語はその後数年間で急速に発展しました。
ウォール氏はもともとその言語を「パール」と呼んでいましたが、それは彼が開発した言語に縁起の良い名前を付け、できるだけ短く覚えやすいものにしたかったからです。彼はすべての 3 文字と 4 文字の単語を検討したとさえ主張しました。妻の名前はグロリア。ただし、別の言語PEARL がすでに存在していたため、混乱を避けるために Wall はその名前をPerlに変更しました。
1988 年にリリースされたPerl 2では、より優れた正規表現エンジンが搭載され、1989 年にリリースされたPerl 3では、バイナリ データ ストリーミングのサポートが追加されました。
かつて、Perl の唯一のドキュメントは、ゆっくりと成長するマニュアル ページでした。1991 年に、Programming Perl (その表紙から多くのPerlプログラマーから「The Camel Book」と呼ばれています) が出版され、 Perl言語の真のリファレンス ソースとなりました。同時に、Perl のバージョン番号が4に変更されました。これは、言語の大きな変更によるものではなく、この本の特別な重要性のためです。
初期のPerl 5
Perl 4の一連の保守バージョン。最後のバージョンは1993 年のPerl 4.036です。当時、Wall はPerl 4を放棄し、Perl 5の開発を開始しました。Perl 5の初期設計は1994 年まで続きました。「perl5-porters 」メーリング リストは、 Perl 5の移植に協力する目的で1994 年5 月に設立されました。これにより、メイン フォーラムはPerl 5の開発、メンテナンス、移植に委ねられます。
Perl 5.000 は1994 年10 月17 日にリリースされました。これはインタプリタをほぼ完全に書き直したもので、オブジェクト、参照、ローカル変数、モジュールなどの多くの新機能が言語に追加されています。重要なのは、モジュールはインタプリタを変更せずに言語を拡張する方法を提供することです。これにより、平均的なPerlプログラマが新しい言語機能を追加できるにもかかわらず、コア インタプリタが非常に安定します。それ以来、Perl 5の開発が活発に行われています。
Perl 5.001 は1995 年3 月13 日にリリースされました。Perl 5.002 は1996 年2 月29 日にリリースされ、パラメータ型の機能が追加されました。これにより、モジュール作成者はPerl の内部コマンドのように機能するスマート サブルーチンを作成できます。Perl 5.003 は、1996 年6月25 日にセキュリティ アップデートとしてリリースされました。
Perl 5 の歴史の中で最も重要な出来事の 1 つは、モジュールのサポートでした。1995 年10 月26 日に、Perlモジュールを公開するための Web サイトであるCPANが設立され、2015 年11 月現在、 12,457人以上の作成者によって作成された157,794 個以上のモジュールがあります。
1997 年5 月15 日にリリースされたPerl 5.004 では、UNIVERSALパッケージが追加されました。これにより、Perlにすべてのクラスのベースと、特定のバージョンのモジュールの使用を要求する機能が提供されました。もう 1 つの重要な開発は、 CGI.pmモジュールの組み込みであり、これによりCGIスクリプト言語としてのPerlの開発が容易になりました。
Perl は、Microsoft Windowsおよびその他のオペレーティング システムでの実行もサポートするようになりました。
Perl 5.005 は1998 年7 月22 日にリリースされました。このバージョンには、より優れた正規表現エンジン、コンパイル システム (モジュール経由)、正規表現参照演算子、基本モジュールの選択、およびBeOSを含む他の多数のオペレーティング システムのサポートが含まれています。B::*
qr//
2000年から現在まで
メジャーバージョン |
最新のアップデート |
5.5 |
2004 年 2 月 23 日 |
5.6 |
2003 年 11 月 15 日 |
5.8 |
2008 年 12 月 14 日 |
5.10 |
2009 年 8 月 23 日 |
5.12 |
2012 年 11 月 10 日 |
5.14 |
2013 年 3 月 10 日 |
5.16 |
2013年3月11日 |
5.18 |
2014 年 10 月 2 日 |
5.20 |
2015 年 9 月 12 日 |
5.22 |
2017 年 7 月 15 日 |
5.24 |
2018 年 4 月 14 日 |
5.26 |
2018 年 4 月 14 日 |
5.28 |
2018年6月23日 |
古いバージョン |
Perl 5.6于2000年3月22日发布。大的修改包括64位支持,Unicode字符串支持,大文件支持(即:超过2GiB的文件)以及“our”关键字。在开发Perl 5.6的时候,开发组决定把版本名称作成类似其它开源项目的;在5.005_63版之后,下一个版本变成了5.5.640,计划是开发版本用奇数,稳定版本用偶数。
2000年时,拉里·沃尔询问社区对Perl新版本的建议。这个进程的结果在361 RFC(评论请求)文件里(这个文件可以指导Perl 6的开发)。2001年,工作开始于设计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处理机制和新的多线程处理,提高了数字精度,添加了一些新模块。
2004年,工作开始于提要——原来的建议文件,但后来变成了Perl 6语言的详述。2005年2月,唐凤,开始开发Pugs,一个用Haskell写的Perl 6直译器。这是最初的一个Perl 6实现。这个努力停止于2006年。
2007年12月18日,Perl 1.0的20周年纪念日,Perl 5.10.0发布了。Perl 5.10.0包括了显着的新特性,这拉近了Perl 5和6之间的距离。这些特性包括一个switch语句(叫做“given/when”),正则表达式的更新和智能匹配操作符“~~”。同时,另一个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。Perl 5.12.3于2011年1月21日发布;它包括了新版的模块和一些文档的改变。版本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的版本,但可以运行可能会不兼容的老脚本。Perl 5.16也更新了核心部分来支持Unicode 6.1。
名称
Perl原名叫“Pearl”。拉里·沃尔想给这个语言起一个有正面意思的短的名字;他考虑了(并且否定了)字典里每一个3—4个字母的词。他也考虑用他的妻子Gloria的名字命名。沃尔在Perl官方发布之前发现了现有的PEARL语言,并且改变了这个名字。
当指代这个语言的时候,名字通常是大写的(Perl),就像专有名词一样。当指代这个直译器本身的时候,这个名字通常是小写的(perl),因为大部分类Unix文件系统都是区分大小写的。在《Programming Perl》的第一版发布之前,用perl指代这个语言也很普遍;Randal L. Schwartz排版时将这个语言的名字在书中写成大写的以便理解。后来,这个大小写的区别就成为正规的了。
全大写的“PERL”是有争议的,而文档中说明“PERL”是不对的,一些核心的社区成员将其视为外行的标志。这个名字偶尔会被视为“Practical Extraction and Report Language”的缩写,就像文档顶端和一些纸质书本说的那样。一些全称被建议作为正式名称,包括沃尔自己的幽默的“Pathologically Eclectic Rubbish Lister”。的确,沃尔要求这个名字启示许多不同的扩展。
骆驼标志
骆驼标志
《Programming Perl》,由奥莱利媒体发布,特色是封面有一张骆驼的图片,因而被称作“骆驼书”。这张骆驼的图片已经成为了Perl非官方的标志和一个黑客的标志,这出现在T恤衫和其它衣服上。
奥莱利拥有此图像之商标,并且宣称,唯有在捍卫「符号之完整性」时,才会行使其法律上的权力。奥莱利允许此商标在非商业目的之前提下被使用,并同时供了Programming Republic of Perl的图像以及Powered by Perl的按钮图。Perl的另一个识别符号是羊驼。因为《Intermediate Perl》一书的封面是一只羊驼。
洋葱标志
洋葱标志
Perl基金会拥有一个可选的标志,一个洋葱,允许它的子站点,Perl Mongers,PerlMonks,Perl.org和其它网站使用。
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”.
另一个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区块
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;
其实还有其他的循环方式。总而言之,就是TMTOWTDI。
Perl的应用
Perl主要应用在Unix平台和网页中(PHP,CGI)。Perl拥有海量的模块支持,在解决问题时非常方便。CPAN有很多Perl模块。
以Perl编写的软件
- Bugzilla
- Movable Type
- 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编译的诗。新的诗经通常会在 (页面存档备份,存于)网站发表。
JAPH
Just another Perl hacker(另一个Perl黑客)是一个和国际C语言混乱代码大赛有着相同精神的社区文化。Perl程序员通过写JAPH代码,来分享自己的编程技术。
竞争对手
因为许多Perl程序的代码难以阅读,加上它的面向对象功能被视为不是真正的面向对象(只是模块的仿真),于是很多人拿Perl和其他动态语言来比较。
最常见的比较对象是Python,有人写了篇文章叫《What's wrong with Perl》,指出Perl的缺点,鼓励别人学Python。著名黑客埃里克·斯蒂芬·雷蒙写了《Why Python?》,该文中一个重要的比较对象就是Perl。《A Byte Of Python》里的《Why Not Perl?》也把Python和Perl比较。
Ruby的作者(松元行弘,Matz)甚至直认他想Ruby作为Perl的后继者。
Raku(旧名Perl 6)
Camelia,Raku项目的标志。
条目:Raku
2000年开始,拉里·沃尔着手开发Perl 6来作为Perl的后继,2019年更名为Raku。
在Perl的官网介绍中,Raku不是Perl 5的下一个版本,而是与Perl 5并行开发的另一种编程语言。 Raku更好地支持面向对象,有专用于定义类的语法:
class Foo is Universal {
# inherit form Universal
has $.member_variable
method member_function {
print "some string";
}
}
Raku可以明确定义变量类型,当类型不匹配,编译时报错。
另外,Raku提供了不同的正则表达式语法,新的语法称作「规则」,并且允许使用者在正则表达式中加入空格等以便阅读,还可以命名一个正则表达式方便调用。
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,而不管它是不是关键字:
if ($hour > 22) {
#正确
say 'should sleep...';
}
if($hour > 22) {
#错误
say 'should sleep...';
}
参考文献
-
- ^ "perl v5.38.0 is now available"; 检索日期: 2023年7月3日; 作者姓名字符串: Ricardo Signes; 出版日期: 2023年7月2日.
- ^ . dev.perl.org. [2018-12-17]. (原始内容存档于2018-07-24).
- ^ Artistic (页面存档备份,存于) - file on the Perl 5 git repository
- ^ . dev.perl.org. [2011-01-08]. (原始内容存档于2011-01-22).
- ^ Lapworth, Leo. . Perl FAQ. Perl.org. [February 24, 2012]. (原始内容存档于2013-06-22).
- ^ . Linux.die.net. [2013-07-23]. (原始内容存档于2013-06-22).
- ^ . [2006-02-10]. (原始内容存档于2006-02-07).
- ^ Sheppard, Doug. . O'Reilly Media. 2000-10-16 [2008-07-27]. (原始内容存档于2008-06-04).
- ^ Wall, Larry, Tom Christiansen and Jon Orwant. . O'Reilly Media. July 2000. ISBN 0-596-00027-8.
- ^ . Google Groups. Google. 1988-02-01 [2011-01-13]. (原始内容存档于2013-05-10).
- ^ . perl.org. [2011-01-13]. (原始内容存档于2011-05-01).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容存档于2011-01-13).
- ^ . CPAN. [2012-04-14]. (原始内容存档于2011-02-26).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容存档于2011-02-27).
- ^ Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen. . O'Reilly Media. 2002 [2011-01-08]. ISBN 978-0-596-00241-1.
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容存档于2011-02-03).
- ^ . www.cpan.org. [2017-06-05]. (原始内容存档于2017-06-01).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容存档于2011-02-02).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容存档于2010-11-18).
- ^ Wall, Larry. . [2011-01-08]. (原始内容存档于2010-11-23).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容存档于2010-11-21).
- ^ . O'Reilly Media. 2005-03-03 [2011-01-27]. (原始内容存档于2012-09-08).
- ^ Tang, Audrey. . PerlMonks. 2010-04-21 [2011-01-03]. (原始内容存档于2011-05-11).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容存档于2010-12-21).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-21]. (原始内容存档于2013-08-26).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容存档于2011-01-04).
- ^ . Perl 5 version 12.2 documentation. perldoc.perl.org. [2011-01-08]. (原始内容存档于2011-06-08).
- ^ . Perl 5 version 16.0 documentation. search.cpan.org. [2012-05-21]. (原始内容存档于2012-05-24).
- ^ Richardson, Marjorie. . Linux Journal. 1999-05-01 [2011-01-03]. (原始内容存档于2011-01-26).
- ^ . perldoc.perl.org - Perl 5 version 12.2 documentation. [2012-07-02]. (原始内容存档于2012-07-12).
- ^ Schwartz, Randal. . PerlMonks. [2007-06-01]. (原始内容存档于2007-09-27).
- ^ Steve McConnell (2004) Code Complete, 2nd ed., Microsoft Press, p. 65.
- ^ Wall, Larry. . Perl 5 version 12.2 documentation. [2011-01-26]. (原始内容存档于2011-01-20).
- ^ Wall, Larry. . PerlMonks. [2011-01-02]. (原始内容存档于2011-05-11).
- ^ Schwartz, Randal L; Phoenix, Tom; foy, brian. . ISBN 978-0-596-00132-2.
- ^ . [2008-11-12]. (原始内容存档于2005-12-26).
- ^ Index of /images/perl
- ^ . [2012-07-03]. (原始内容存档于2012-06-26).
- ^ . The Perl Foundation. [2011-01-09]. (原始内容存档于2011-05-03).
- ^ . dev411.com. 2009-01-24 [2012-07-03]. (原始内容存档于2012-06-25).
- ^ . [2015-11-19]. (原始内容存档于2015-11-19).
- ^ . [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。 (页面存档备份,存于)
- ^ . The Perl 6 Project. [2011-02-27]. (原始内容存档于2011-02-21).
- ^ . [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.
- ^ . [2012-07-04]. (原始内容存档于2012-07-03).
- ^ . [2012-07-04]. (原始内容存档于2012-07-03).
- ^ . [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 ソース コード フィルタリング ソフトウェア (ページ アーカイブ バックアップ、保存場所) (英語)
この記事は Wikipediaから引用しています。このテキストは、 クリエイティブ コモンズ - 表示 - 継承に基づいてライセンスされています。メディア ファイルには追加の規約が適用される場合があります。