-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPerl
455 lines (367 loc) · 43.2 KB
/
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
{{NoteTA
|G1=IT
|G2=FL
|1=zh-hans:模块;zh-hant:模組;
|2=zh-hans:程序;zh-hant:程式;
|3=zh-hans:解释型; zh-hant:直譯式;
|4=zh-hans:解释; zh-hant:直譯;
|5=zh-hans:翻译; zh-hant:轉譯;
|6=zh-cn:源代码;zh-tw:原程式碼;
}}
{{Infobox programming language
| name = Perl
| logo = Programming-republic-of-perl.png
| paradigm = [[多重编程范式]]:[[函數程式語言|函數]]、[[指令式編程|指令式]]、[[面向对象程序设计|面向对象]] ([[類別為基的程式設計|類別為基]])、[[反射 (计算机科学)|反射]]、[[过程式编程|过程式]]、[[事件驅動程式設計|事件驅動]]、[[泛型]]
| designer = [[拉里·沃尔]]
| developer = [[拉里·沃尔]]
| typing = 动态
| influenced = [[CoffeeScript]]、[[ECMAScript]]、[[Groovy]]、<br />[[JavaScript]]、[[Julia (编程语言)|Julia]]、[[LPC (程式語言)|LPC]]、[[Perl 6]]、[[PHP]]、[[Python]]、[[Ruby]]、[[Windows PowerShell]]
| license = [[艺术许可协议#Artistic License 1.0|艺术许可协 1.0]]<ref name="artistic-1.0">{{cite web|url=http://dev.perl.org/licenses/artistic.html|title=The "Artistic License" - dev.perl.org|website=dev.perl.org|access-date=2018-12-17|archive-url=https://web.archive.org/web/20180724213601/http://dev.perl.org/licenses/artistic.html|archive-date=2018-07-24|dead-url=yes}}</ref><ref name="artistic-1.0-git">[http://perl5.git.perl.org/perl.git/blob/HEAD:/Artistic Artistic] {{Wayback|url=http://perl5.git.perl.org/perl.git/blob/HEAD:/Artistic |date=20180725033309 }} - file on the Perl 5 git repository</ref><br />[[GNU通用公共许可证]]<ref name="licensing">{{cite web |url = http://dev.perl.org/licenses |title = Perl Licensing |accessdate = 2011-01-08 |publisher = dev.perl.org |archive-url = https://web.archive.org/web/20110122175123/http://dev.perl.org/licenses/ |archive-date = 2011-01-22 |dead-url = no }}</ref>
| website = {{url|https://www.perl.org}}
| wikibooks = Perl Programming
| year = {{Start date and age|1987|12|18}}
| latest_release_version = 5.32.0<ref>{{cite web |url = https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257547.html |title = Perl 5.32.0 is now available! |accessdate = 2020-06-20 |publisher = www.nntp.perl.org }}</ref> / {{Start date and age|mf=yes|2020|06|20}}
5.30.3<ref>{{cite web |url = https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257498.html |title = Perl 5.30.3 is now available! |accessdate = 2020-06-01 |publisher = www.nntp.perl.org }}</ref> / {{Start date and age|mf=yes|2020|06|01}}
5.28.3<ref>{{cite web |url = https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257497.html |title = Perl 5.28.3 is now available! |accessdate = 2020-06-01 |publisher = www.nntp.perl.org }}</ref> / {{Start date and age|mf=yes|2020|06|01}}
| latest_release_date =
| latest_preview_version = 5.33.3<ref>{{cite web |url = https://www.nntp.perl.org/group/perl.perl5.porters/2020/10/msg258502.html |title = Perl 5.33.3 is now available! |accessdate = 2020-10-20 |publisher = www.nntp.perl.org}}</ref>
| latest_preview_date = {{Start date and age|mf=yes|2020|10|20}}
| turing-complete = Yes
| influenced_by = [[AWK]]、[[C语言]]、[[C++]]、[[LISP|Lisp]]、[[Pascal (程式語言)|Pascal]], [[sed]]、[[Smalltalk|Smalltalk 80]]、[[Unix shell]]
| programming_language = [[C语言]]
| operating_system = [[跨平台]]
| file_ext = .pl, .pm, .t, .pod
}}
'''Perl'''是[[高级语言|高階]]、[[通用编程语言|通用]]、[[直譯語言|直譯式]]、[[动态语言|動態]]的[[程式语言|程式语言家族]]。最初设计者[[拉里·沃尔]]為了讓在[[UNIX]]上進行報表處理的工作變得更方便,決定開發一個通用的[[腳本語言]],而在1987年12月18日發表。目前,Perl语言家族包含两个分支Perl 5以及[[Perl 6]]。雖然Perl不是正式的首字母縮略詞<ref>{{cite web |url = http://learn.perl.org/faq/perlfaq1.html#Whats-the-difference-between-perl-and-Perl |title = General Questions About Perl |last = Lapworth |first = Leo |publisher = Perl.org |work = Perl FAQ |accessdate = February 24, 2012 |archive-date = 2013-06-22 |archive-url = https://www.webcitation.org/6HZ9yBwbW?url=http://learn.perl.org/faq/perlfaq1.html#Whats-the-difference-between-perl-and-Perl |dead-url = no }}</ref>,但仍有各種各樣的[[逆向首字母缩略词]],包括“實用的提取和報告語言”。<ref>{{cite web |url = http://linux.die.net/man/1/perl |title = perl(1): Practical Extraction/Report Language - Linux man page |date = |publisher = Linux.die.net |accessdate = 2013-07-23 |archive-date = 2013-06-22 |archive-url = https://www.webcitation.org/6HZ9z0o0I?url=http://linux.die.net/man/1/perl |dead-url = no }}</ref>
Perl借用了[[C语言|C]]、[[sed]]、[[AWK|awk]]、[[Unix shell|shell]]脚本、[[Lisp]]以及很多其他程式語言的特性。其中最重要的特性是Perl内部集成了[[正则表达式]]的功能,以及巨大的第三方代码库[[CPAN]]。
2000年开始,[[拉里·沃尔]]著手開發[[Perl 6|Raku]]來作為Perl的後繼,Perl 6語言的語法有很多轉變,也被視為Perl家族中的另一個語言。<ref>{{Cite web |url=http://dev.perl.org/perl6/ |title=Perl Core Development - Perl 6 |access-date=2006-02-10 |archive-url=https://web.archive.org/web/20060207094455/http://dev.perl.org/perl6/ |archive-date=2006-02-07 |dead-url=no }}</ref>
Perl语言应用广泛,涵盖[[通用网关接口|CGI]]、图形编程、系统管理、网络编程、金融、生物等领域。由于其灵活性,Perl被称为[[脚本语言]]中的[[瑞士军刀]]。<ref>{{cite web |url=http://www.perl.com/pub/a/2000/10/begperl1.html |title=Beginner's Introduction to Perl |accessdate=2008-07-27 |last=Sheppard |first=Doug |date=2000-10-16 |publisher=[[O'Reilly Media]] |archive-url=https://web.archive.org/web/20080604140740/http://www.perl.com/pub/a/2000/10/begperl1.html |archive-date=2008-06-04 |dead-url=no }}</ref>
鉴于Perl在实际工程应用中广泛使用,[[MacOS]],[[Linux]],[[FreeBSD]]等现代化[[操作系统]][[默认安装]]Perl。
== 历史 ==
=== 早期版本 ===
[[拉里·沃尔]]在1987年开始写作Perl,那时他正在[[Unisys]]当[[程序员]]<ref name="programmingperl">{{cite book | title=Programming Perl, Third Edition | author=[[Larry Wall|Wall, Larry]], Tom Christiansen and [[Jon Orwant]] | publisher=[[O'Reilly Media]] | isbn=0-596-00027-8|date=July 2000}}</ref>,并且在1987年12月18日把1.0版本发布到了comp.sources.misc[[新闻组]]<ref>{{cite web |url= http://groups.google.com/group/comp.sources.unix/tree/browse_frm/month/1988-02?_done=%2Fgroup%2Fcomp.sources.unix%2Fbrowse_frm%2Fmonth%2F1988-02%3F& |title= comp.sources.unix |accessdate= 2011-01-13 |date= 1988-02-01 |work= Google Groups |publisher= [[Google]]}}</ref>。这个语言在接下来的几年内很快地发展起来。
沃尔最早的确把这个语言称为“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的开发,维护,和移植<ref>{{cite web | url = http://www.nntp.perl.org/group/perl.perl5.porters/ | title = perl.perl5.porters archive | accessdate = 2011-01-13 | publisher = perl.org | archive-url = https://web.archive.org/web/20110501081803/http://www.nntp.perl.org/group/perl.perl5.porters/ | archive-date = 2011-05-01 | dead-url = no }}</ref>。
Perl 5.000于1994年10月17日发布<ref>{{cite web | url = http://perldoc.perl.org/perlhist.html | title = perlhist - the Perl history records | accessdate = 2011-01-21 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110113030100/http://perldoc.perl.org/perlhist.html | archive-date = 2011-01-13 | dead-url = no }}</ref>。这是一个几乎完全重写了的[[解释器]],而且它给这个语言添加了很多新的特性,包括对象,引用,[[局部变量]],和[[模块 (程序设计)|模块]]。很重要地,模块提供了一个不用修改直译器就可以扩展语言的方法。这使得核心的直译器非常稳定,即使它允许一般的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多个模块了<ref>{{cite web | url = http://www.cpan.org/ | title = CPAN | accessdate = 2012-04-14 | publisher = [[CPAN]] | archive-url = https://web.archive.org/web/20110226063250/http://www.cpan.org/ | archive-date = 2011-02-26 | dead-url = yes }}</ref>。
Perl 5.004于1997年5月15日发布,添加了UNIVERSAL包,这给了Perl一个所有的类的基础和要求使用模块的特定版本的能力。另一个重要的开发是包括了[[CGI.pm]]模块<ref name='5004delta'>{{cite web | url = http://perldoc.perl.org/perl5004delta.html | title = perl5004delta - what's new for perl5.004 | accessdate = 2011-01-08 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110227200616/http://perldoc.perl.org/perl5004delta.html | archive-date = 2011-02-27 | dead-url = no }}</ref>,有助于Perl发展为一个CGI脚本语言<ref name='patwardhan02'>{{cite book | last1 = Patwardhan | first1 = Nathan | last2 = Siever | first2 = Ellen | last3 = Spainhour | first3 = Stephen | title = Perl in a Nutshell, Second Edition | publisher = O'Reilly Media | year = 2002 | accessdate = 2011-01-08 | isbn = 978-0-596-00241-1}}</ref>。
Perl现在也支持在[[Microsoft Windows]]和其它一些[[操作系统]]下运作<ref name='5004delta'>{{cite web | url = http://perldoc.perl.org/perl5004delta.html | title = perl5004delta - what's new for perl5.004 | accessdate = 2011-01-08 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110227200616/http://perldoc.perl.org/perl5004delta.html | archive-date = 2011-02-27 | dead-url = no }}</ref>。
Perl 5.005于1998年7月22日发布。这个版本包括了一个更好的[[正则表达式|正则]]引擎,一个编译系统(通过<code>B::*</code>模块),<code>qr//</code>正则引用操作符,一个基础模块的选集,并且又支持了一些其它的操作系统,包括[[BeOS]]<ref name='5005delta'>{{cite web | url = http://perldoc.perl.org/perl5005delta.html | title = perl5005delta - what's new for perl5.005 | accessdate = 2011-01-21 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110203100249/http://perldoc.perl.org/perl5005delta.html | archive-date = 2011-02-03 | dead-url = no }}</ref>。
=== 2000年至今 ===
{| class="wikitable floatright"
|-
! 主要版本
! 最后更新
|-
| {{Version|o|5.5}}
| {{Start date|2004|2|23}}<ref name="cpan-src">{{cite web |url = http://www.cpan.org/src/ |title = Perl Source |publisher = www.cpan.org |date = |accessdate = 2017-06-05 |archive-url = https://web.archive.org/web/20170601222517/http://www.cpan.org/src/ |archive-date = 2017-06-01 |dead-url = no }}</ref>
|-
| {{Version|o|5.6}}
| {{Release date|2003|11|15}}<ref name="cpan-src" />
|-
| {{Version|o|5.8}}
| {{Release date|2008|12|14}}<ref name="cpan-src" />
|-
| {{Version|o|5.10}}
| {{Release date|2009|8|23}}<ref name="cpan-src" />
|-
| {{Version|o|5.12}}
| {{Release date|2012|11|10}}<ref name="cpan-src" />
|-
| {{Version|o|5.14}}
| {{Release date|2013|3|10}}<ref name="cpan-src" />
|-
| {{Version|o|5.16}}
| {{Release date|2013|3|11}}<ref name="cpan-src" />
|-
| {{Version|o|5.18}}
| {{Release date|2014|10|2}}<ref name="cpan-src" />
|-
| {{Version|o|5.20}}
| {{Release date|2015|9|12}}<ref name="cpan-src" />
|-
| {{Version|o|5.22}}
| {{Release date|2017|7|15}}<ref name="cpan-src" />
|-
| {{Version|o|5.24}}
| {{Release date|2018|4|14}}<ref name="cpan-src" />
|-
| {{Version|co|5.26}}
| {{Release date|2018|4|14}}<ref name="cpan-src" />
|-
| {{Version|c|5.28}}
| {{Release date|2018|6|23}}<ref name="cpan-src" />
|-
| colspan="99" | <small>{{Version |lv |show=011101}}</small>
|}
Perl 5.6于2000年3月22日发布。大的修改包括64位支持,[[Unicode]]字串支持,大文件支持(即:超过2[[GiB]]的文件)以及“our”关键字<ref name='56delta'>{{cite web | url = http://perldoc.perl.org/perl56delta.html | title = perl56delta - what's new for perl v5.6.0 | accessdate = 2011-01-21 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110202135358/http://perldoc.perl.org/perl56delta.html | archive-date = 2011-02-02 | dead-url = no }}</ref><ref name='561delta'>{{cite web | url = http://perldoc.perl.org/perl561delta.html | title = perl56delta - what's new for perl v5.6.x | accessdate = 2011-01-21 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20101118101544/http://perldoc.perl.org/perl561delta.html | archive-date = 2010-11-18 | dead-url = no }}</ref>。在开发Perl 5.6的时候,开发组决定把版本名称作成类似其它开源项目的;在5.005_63版之后,下一个版本变成了5.5.640,计划是开发版本用奇数,稳定版本用偶数。
2000年时,拉里·沃尔询问社区对Perl新版本的建议。这个进程的结果在361 RFC(评论请求)文件里(这个文件可以指导Perl 6的开发)。2001年<ref>{{cite web | url = http://dev.perl.org/perl6/doc/design/apo/A01.html | title = Apocalypse 1: The Ugly, the Bad, and the Good | accessdate = 2011-01-08 | last = Wall | first = Larry | archive-url = https://web.archive.org/web/20101123182201/http://dev.perl.org/perl6/doc/design/apo/A01.html | archive-date = 2010-11-23 | dead-url = no }}</ref>,工作开始于设计[[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处理机制和新的多线程处理,提高了数字精度,添加了一些新模块<ref name='perl58delta'>{{cite web | url = http://perldoc.perl.org/perl58delta.html | title = perl58delta - what is new for perl v5.8.0 | accessdate = 2011-01-21 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20101121023149/http://perldoc.perl.org/perl58delta.html | archive-date = 2010-11-21 | dead-url = no }}</ref>。
2004年,工作开始于提要——原来的建议文件,但后来变成了Perl 6语言的详述。[[2005年2月]],[[唐凤]],开始开发[[Pugs]],一个用[[Haskell]]写的Perl 6直译器<ref>{{cite web |url=http://www.perl.com/pub/a/2005/03/03/pugs_interview.html |title=A Plan for Pugs |date=2005-03-03 |publisher=[[O'Reilly Media]] |accessdate=2011-01-27 |archive-url=https://archive.is/20120908200150/http://www.perl.com/pub/2005/03/03/pugs_interview.html |archive-date=2012-09-08 |dead-url=no }}</ref>。这是最初的一个Perl 6实现。这个努力停止于2006年<ref>{{cite web | url = http://www.perlmonks.org/?node_id=835936 | title = Re: How to Implement Perl 6 in Ten Years | accessdate = 2011-01-03 | last = Tang | first = Audrey | date = 2010-04-21 | publisher = [[PerlMonks]] | archive-url = https://web.archive.org/web/20110511190417/http://www.perlmonks.org/?node_id=835936 | archive-date = 2011-05-11 | dead-url = no }}</ref>。
2007年12月18日,Perl 1.0的20周年纪念日,Perl 5.10.0发布了。Perl 5.10.0包括了显著的新特性,这拉近了Perl 5和[[Perl 6|6]]之间的距离。这些特性包括一个{{le|switch语句|switch statement}}(叫做“given/when”),正则表达式的更新和智能匹配操作符“~~”<ref name='5100delta'>{{cite web | url = http://perldoc.perl.org/perl5100delta.html | title = perl5100delta - what is new for perl 5.10.0 | accessdate = 2011-01-08 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20101221024004/http://perldoc.perl.org/perl5100delta.html | archive-date = 2010-12-21 | dead-url = no }}</ref><ref name='perlsyn-smart'>{{cite web | url = http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail | title = perlsyn - Perl syntax | accessdate = 2011-01-21 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20130826100652/http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail#Smart-matching-in-detail | archive-date = 2013-08-26 | dead-url = no }}</ref>。同时,另一个Perl 6的实现,[[Rakudo Perl]]的开发开始了,一起使用[[Parrot虚拟机]]开发。从[[2009年11月]]开始,Rakudo Perl已经是每月一更新,现在已经是Perl 6的最完整的一个实现了。
Perl 5开发过程中的一次大修改在Perl 5.11;开发社区使用了每月更新的形式,这样就可以提前预知3个月以内的发布日期。
2010年4月12日,Perl 5.12.0发布了。显著的提升包括新的<code>package NAME VERSION</code>语法,Yada Yada操作符(有意地用占位符标记没有实现的代码),默认<code>use strict;</code>(在<code>use 5.012;</code>时)完整的[[Y2038]]编译,正则转化重载,[[DTrace]]支持,和[[Unicode]]5.2<ref name='5120delta'>{{cite web | url = http://perldoc.perl.org/perl5120delta.html | title = perl5120delta - what is new for perl v5.12.0 | accessdate = 2011-01-08 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110104093548/http://perldoc.perl.org/perl5120delta.html | archive-date = 2011-01-04 | dead-url = no }}</ref>。Perl 5.12.3于2011年1月21日发布;它包括了新版的模块和一些文档的改变<ref name='5123delta'>{{cite web | url = http://perldoc.perl.org/perl5123delta.html | title = perldelta - what is new for perl v5.12.3 | accessdate = 2011-01-08 | work = Perl 5 version 12.2 documentation | publisher = perldoc.perl.org | archive-url = https://web.archive.org/web/20110608102751/http://perldoc.perl.org/perl5123delta.html | archive-date = 2011-06-08 | dead-url = no }}</ref>。版本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的版本,但可以运行可能会不兼容的老脚本<ref name='5160delta_version'>{{cite web | url = http://search.cpan.org/~rjbs/perl-5.16.0/pod/perldelta.pod | title = perldelta - what is new for perl v5.16.0 | accessdate = 2012-05-21 | work = Perl 5 version 16.0 documentation | publisher = search.cpan.org | archive-url = https://web.archive.org/web/20120524045703/http://search.cpan.org/~rjbs/perl-5.16.0/pod/perldelta.pod | archive-date = 2012-05-24 | dead-url = no }}</ref>。Perl 5.16也更新了核心部分来支持[[Unicode]] 6.1<ref name="5160delta_version" />。
=== 名称 ===
Perl原名叫“Pearl”。拉里·沃尔想给这个语言起一个有正面意思的短的名字;他考虑了(并且否定了)字典里每一个3—4个字母的词。他也考虑用他的妻子Gloria的名字命名。沃尔在Perl官方发布之前发现了现有的[[PEARL]]语言,并且改变了这个名字<ref name="richardson1999">{{cite web | url = http://www.linuxjournal.com/article/3394 | title = Larry Wall, the Guru of Perl | accessdate = 2011-01-03 | last = Richardson | first = Marjorie | date = 1999-05-01 | publisher = [[Linux Journal]] | archive-url = https://web.archive.org/web/20110126031809/http://www.linuxjournal.com/article/3394 | archive-date = 2011-01-26 | dead-url = yes }}</ref>。
当指代这个语言的时候,名字通常是大写的('''Perl'''),就像专有名词一样。当指代这个直译器本身的时候,这个名字通常是小写的('''perl'''),因为大部分类Unix文件系统都是区分大小写的。在《{{le|Programming Perl|Programming Perl}}》的第一版发布之前,用'''perl'''指代这个语言也很普遍;{{le|Randal L. Schwartz|Randal L. Schwartz}}排版时将这个语言的名字在书中写成大写的以便理解。后来,这个大小写的区别就成为正规的了<ref name="capitalization">{{cite web |url = http://perldoc.perl.org/perlfaq1.html#What's-the-difference-between-%22perl%22-and-%22Perl%22%3f |title = perlfaq1: What's the difference between "perl" and "Perl"? |work = perldoc.perl.org - Perl 5 version 12.2 documentation |access-date = 2012-07-02 |archive-url = https://web.archive.org/web/20120712160138/http://perldoc.perl.org/perlfaq1.html#What's-the-difference-between-%22perl%22-and-%22Perl%22%3f#What's-the-difference-between-%22perl%22-and-%22Perl%22%3f |archive-date = 2012-07-12 |dead-url = no }}</ref>。
全大写的“PERL”是有争议的,而文档中说明“PERL”是不对的<ref name="capitalization" />,一些核心的社区成员将其视为外行的标志<ref>{{cite web |last = Schwartz |first = Randal |authorlink = Randal L. Schwartz |title = PERL as shibboleth and the Perl community |url = http://www.perlmonks.org/index.pl?node_id=510594 |publisher = [[PerlMonks]] |accessdate = 2007-06-01 |archive-url = https://web.archive.org/web/20070927001234/http://www.perlmonks.org/index.pl?node_id=510594 |archive-date = 2007-09-27 |dead-url = no }}</ref>。这个名字偶尔会被视为“Practical Extraction and Report Language”的缩写,就像文档<ref name="richardson1999" />顶端和一些纸质书本说的那样<ref>Steve McConnell (2004) ''Code Complete,'' 2nd ed., Microsoft Press, p. 65.</ref>。一些全称被建议作为正式名称,包括沃尔自己的幽默的“Pathologically Eclectic Rubbish Lister”<ref>{{cite web |last = Wall |first = Larry |authorlink = Larry Wall |title = perl - The Perl language interpreter |work = Perl 5 version 12.2 documentation |url = http://perldoc.perl.org/perl.html#BUGS |accessdate = 2011-01-26 |archive-url = https://web.archive.org/web/20110120121508/http://perldoc.perl.org/perl.html#BUGS#BUGS |archive-date = 2011-01-20 |dead-url = no }}</ref>。的确,沃尔要求这个名字启示许多不同的扩展<ref>{{cite web |last = Wall |first = Larry |authorlink = Larry Wall |title = Re^7: PERL as shibboleth and the Perl community |url = http://www.perlmonks.org/index.pl?node_id=511722 |publisher = [[PerlMonks]] |accessdate = 2011-01-02 |archive-url = https://web.archive.org/web/20110511190451/http://www.perlmonks.org/index.pl?node_id=511722 |archive-date = 2011-05-11 |dead-url = no }}</ref>。
=== 骆驼标志 ===
[[File:Perl-camel-small.png|缩略图|右|骆驼标志]]
《''Programming Perl''》,由[[奥莱理]]媒体发布,特色是封面有一张[[骆驼]]的图片,因而被称作“骆驼书”<ref name='schwartz01'>{{cite book |last1 = Schwartz |first1 = Randal L |authorlink1 = Randal L. Schwartz |last2 = Phoenix |first2 = Tom |last3 = foy |first3 = brian |authorlink3 = Brian D Foy |title = Learning Perl, Third Edition |accessdate = 2011-01-08 |isbn = 978-0-596-00132-2}}</ref>。这张骆驼的图片已经成为了Perl非官方的标志和一个[[黑客]]的标志,这出现在T恤衫和其它衣服上。
歐萊禮擁有此圖像之商標,並且宣稱,唯有在捍衛「符號之完整性」時,才會行使其法律上的權力<ref>{{Cite web |url=http://perl.oreilly.com/usage/ |title=O'Reilly—The Perl Camel Usage and Trademark Information |access-date=2008-11-12 |archive-url=https://web.archive.org/web/20051226100008/http://perl.oreilly.com/usage/ |archive-date=2005-12-26 |dead-url=no }}</ref>。歐萊禮允許此商標在非商業目的之前提下被使用,並同時供了Programming Republic of Perl的圖像以及Powered by Perl的按鈕圖。<ref>[http://www.oreillynet.com/images/perl/ Index of /images/perl]</ref>Perl的另一個識別符號是[[羊驼]]。因为《[[Intermediate Perl]]》一书的封面是一只羊驼<ref>{{Cite web |url=http://shop.oreilly.com/product/9780596102067.do |title=Intermediate Perl |access-date=2012-07-03 |archive-url=https://web.archive.org/web/20120626234938/http://shop.oreilly.com/product/9780596102067.do |archive-date=2012-06-26 |dead-url=no }}</ref>。
==== 洋葱标志 ====
[[File:Onion 64x64.png|缩略图|右|洋葱标志]]
Perl基金会拥有一个可选的标志,一个洋葱,允许它的子站点,[[Perl Mongers]],[[PerlMonks]],Perl.org和其它网站使用<ref name='onion'>{{cite web | url = http://www.perlfoundation.org/perl_trademark | title = Perl Trademark | accessdate = 2011-01-09 | publisher = [[The Perl Foundation]] | archive-url = https://web.archive.org/web/20110503211915/http://www.perlfoundation.org/perl_trademark | archive-date = 2011-05-03 | dead-url = yes }}</ref>。
== Perl简介 ==
=== Perl语言的中心思想 ===
Perl语言的中心思想可以集成为一句话「'''[[TMTOWTDI]]'''」:
{{Quote|There's More Than One Way To Do It.<br />(不只一种方法來做一件事。)}}
Perl的作者拉里·沃尔建议可以把这个缩写词念成「Tim Toady」。这句话后来被扩充成:
{{Quote|There's more than one way to do it, but sometimes consistency is not a bad thing either.<br />(不只一种方法來做一件事,但有时保持一致也不错。)
*'''TIMTOWTDIBSCINABTE''',发音为“Tim Toady Bicarbonate”<ref>{{cite web | url=http://www.dev411.com/blog/2009/01/24/can-epo-or-tpf-tame-timtowtdi | title=Can EPO (or TPF) tame TIMTOWTDI? | publisher=dev411.com | date=2009-01-24 | access-date=2012-07-03 | archive-url=https://web.archive.org/web/20120625222803/http://www.dev411.com/blog/2009/01/24/can-epo-or-tpf-tame-timtowtdi/ | archive-date=2012-06-25 | dead-url=yes }}</ref>.}}
另一个Perl程序员常常想起的Perl俗语是:
{{Quote|Easy things should be easy, and hard things should be possible.<br />(简单的事情应该是简单的,复杂的事情应该尽可能地变得简单。)}}
=== 优点 ===
为了实现这样的目标,并且又因为Larry Wall本人也是一个语言学家,他设计Perl语言时使用了很多语言学的思维。相比[[C语言|C]]、[[Pascal (程式語言)|Pascal]]这样的“高级”语言而言,Perl语言直接提供泛型變數、动态数组、Hash表等更加便捷的编程元素。Perl具有[[动态语言]]的强大灵活的特性,并且还从C/C++、Basic、Pascal等语言中分别借鉴了语法规则,从而提供了许多冗餘语法。使得程序员可以忽略计算机内部資料存储、类型、处理方法、运算规则、甚至内存越界等等的细节,而将思考中心放在所需要的程序逻辑上。就这一点而言,很多Perl程序员认为目前-{只}-有Perl、[[Python]]等[[泛型]]语言才能称为“高级”语言,而[[C语言|C]]、[[Pascal (程式語言)|Pascal]]甚至[[C++]]这些-{只}-能称为“中高级”语言而已。可以说,在统一變數类型和掩盖运算细节方面,Perl做得比[[Python]]更为出色。
由于从其他语言大量借鉴了语法,使得从其他[[编程语言]]转到Perl语言的程序员可以迅速上手写程序并完成任务,这使得Perl语言是一门容易用的语言。
=== 缺点 ===
也正是因为Perl的灵活性和“过度”的冗余语法,也因此获得了仅写(write-only)的“美誉”,因为Perl-{zh-hans:程序;zh-tw:程式;}-可以写得很随意(例如,-{zh-hans:变量;zh-tw:變數;}-不经-{zh-hans:声明;zh-tw:宣告;}-就可以直接使用),但是可能少写一些字母就会得到意想不到的结果(而不报错),许多Perl-{zh-hans:程序;zh-tw:程式;}-的-{zh-hans:代码;zh-tw:程式碼;}-令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令-{zh-hans:程序;zh-tw:程式;}-的维护者(甚至是编写者)难以维护。
同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。对此,《Learning Perl》一书里建议经常使用Perl编程。
建议的解决方法是在程序裡使用<code>use strict;</code>以及<code>use warnings;</code>,并统一代码风格,使用库,而不是自己使用「[[硬编码]]」。Perl同样可以将代码书写得像[[Python]]或[[Ruby]]等语言一样优雅。
== Perl的语法 ==
=== Perl的Hello World程式 ===
下面是一个在標準輸出設備上輸出[[Hello World程序|Hello World]]的簡單程式,這種程式通常作為開始學習程式語言的第一個範例:
<syntaxhighlight lang="perl">
#!/usr/bin/env perl
print "Hello, world!\n";
</syntaxhighlight>
如果有perl 5.10以上的版本,也可以这样:
<syntaxhighlight lang="perl">
#!/usr/bin/env perl
use 5.010;
say "Hello, world!";
</syntaxhighlight>
这个程序将输出一行字符串:“Hello, world!”,以及一个换行。
=== 变量 ===
Perl是一种[[類型系統|无类型语言]](untyped),换句话说,在语言层面上,Perl和大多数编程语言不同,不把[[变量]]分成[[整数]]、[[字符]]、[[浮点数]]等等,而-{只}-有一种能接受各种类型数据的“无类型”变量。Perl的变量以$字符开头。例如<tt>$a=5;</tt><tt>$b="Hello"</tt>;<tt>$c=3.2;$d='\n这里并不换行'</tt>都是合法的Perl语句。
Perl中各种变量的运算也很自由,数和含有数的字符串是等效的,可以把数字字符串参与数学计算,也可以反之,让数字参与字符串的构成和操作。
除单个变量(Perl称为标量「'''Scalar'''」)之外,Perl还有两种集合类型,分别是数组('''Array''',用@字符开头)和关联数组('''Associative array''',或者称为'''Hash''',用%开头。类似[[C++11]]的[[標準模板庫|STL]] 无序表「'''unordered_map'''」和[[Python]]的字典「'''Dictionary'''」)。数组可以内含任意可变数目的变量,并以其存储顺序作为索引以完成常数时间的定位;而Hash表,则可以在变量之间建立一一映射,就像字典一样,把不同的变量按照他们的逻辑关系组织起来,并以作为“键”的变量进行索引,完成常数时间的定位。
另外,Perl还有一种特殊的类型,引用(reference),类似于指针,当作标量处理,可以指向标量(含引用)、数组、Hash等任何类型。如:
<syntaxhighlight lang='perl'>
$foo = \$bar; print $$foo;
$foo = \@bar; print @$foo;
$foo = \%bar; print %$foo;
$foo = \&bar; print $foo->(); print &$foo;
</syntaxhighlight>
引用的好处在于,将它传递给函数之后,函数可以修改它指向的变量。而如果传递普通变量,修改的值只在函数内有效。
<syntaxhighlight lang='perl'>
sub foo
{
my $var = shift;
$$var = '1';
}
my $foo = '2';
my $var = \$foo;
print $$var;
foo ($var);
print $foo;
</syntaxhighlight>
输出“21”,即foo()内改变了$foo。
=== 判断语句 ===
因为Perl大量的创造冗余的语法,并且从其他语言中大量的借鉴语法,使得Perl的语法极其丰富和灵活。Perl共有下列几种判断语句:
* <tt>if</tt>区块
<syntaxhighlight lang="perl">
if ($hour > 22) {
print "should sleep...\n";
}
</syntaxhighlight>
* <tt>if</tt>语句
<syntaxhighlight lang="perl">
print "hello" if $guest >= 1;
</syntaxhighlight>
* <tt>unless</tt>区块
<syntaxhighlight lang="perl">
unless ($credit > 100) {
print "You can not graduate!\n";
}
</syntaxhighlight>
* <tt>unless</tt>语句
<syntaxhighlight lang="perl">
print "eat\n" unless $food == 0;
</syntaxhighlight>
* <tt>given/when</tt>(语句及区块)
<syntaxhighlight lang="perl">
use 5.010;
given ($foo)
{
say 'a' when 'a';
when (/b/) { say 'b'; } #when可以写成语句或区块
default { say 'not match'; } #只可以写成区块。
}
</syntaxhighlight>
由于[[逻辑]]運算元的作用,还可以写出不用[[关键字]]<tt>if</tt>或<tt>unless</tt>的判断语句,如常用的打开文件语句:
<syntaxhighlight lang="perl">
open DATA, '<', $filename or die "Can't open $filename: $!\n";
</syntaxhighlight>
=== 循环语句 ===
Perl中的循环语句也是非常的丰富。主要有:
Perl自己的for或者foreach循环(两个完全一样):
<syntaxhighlight lang="perl">
@group = 1 .. 10;
for (@group) {
print "$_\n";
}
print "$_\n" for @group;
foreach (@group) {
print "$_\n";
}
</syntaxhighlight>
从C语言借鉴来的for循环(又可写作foreach,两个完全一样):
<syntaxhighlight lang="perl">
for ($i = 0; $i < 10; $i++) {
print "$group[$i]\n";
}
</syntaxhighlight>
while循环:
<syntaxhighlight lang="perl">
$i=0;
while ($i < 10) {
print "$group[$i]\n";
$i++;
}
</syntaxhighlight>
do...while循环:
<syntaxhighlight lang="perl">
$i = 0;
do {
print "$group[$i]\n";
$i++;
} while ($i < 10);
</syntaxhighlight>
until循环:
<syntaxhighlight lang="perl">
$i = 0;
until ($i == 10) {
print "$group[$i]\n";
$i++;
}
</syntaxhighlight>
从PASCAL语言借鉴来的do...until循环:
<syntaxhighlight lang="perl">
$i = 0;
do {
print "$group[$i]\n";
$i++;
} until ($i == 10);
</syntaxhighlight>
甚至还有利用动态语言特性,用map函数也可以做循环:
<syntaxhighlight lang="perl">
map { print "$_\n" } @group;
</syntaxhighlight>
其实还有其他的循环方式。总而言之,就是[[There's more than one way to do it|TMTOWTDI]]。
== Perl的应用 ==
Perl主要应用在[[Unix]]平台和网页中([[PHP]],[[通用网关接口|CGI]])。Perl拥有海量的[[模块 (程序设计)|模块]]支持,在解决问题时非常方便。[[CPAN]]有很多Perl模块。
=== 以Perl编写的软件 ===
* [[Bugzilla]]
* [[Movable Type]]
* {{link-en|TWiki|TWiki}}
* [[Frozen Bubble]]
=== Perl Data Language ===
Perl Data Language(简称PDL)是Perl的一个外接[[模块 (程序设计)|模块]],也是对Perl功能的一个重要拓展。它使得Perl语言可以直接对2至多维的[[矩阵]]直接操作,进行快速的矩阵运算,完成基础的Perl所不能完成的运算,大大拓展了Perl的适用范围。所以PDL本身也是很多其他模块的基础。
而且PDL提供了与很多其他软件包的接口,例如'''[[FFTW]]'''(一个[[快速傅立叶变换]]的软件包),又或者是[[Mesa 3D|Mesa]]([[Linux]]上的[[OpenGL]]三维图形渲染包),这些包原来往往仅提供C/C++语言接口。这一功能使PDL成为拓展Perl功能的一个中间层。
== Perl的社区文化 ==
=== Perl诗经 ===
和C語言一樣,在Perl界,難以讀懂的程式碼大賽是個有名的活動。近似難以讀懂的程式碼,但方向不同,Perl Poetry是可以被perl編譯的詩。新的詩經通常會在[https://web.archive.org/web/20070518024016/http://www.perlmonks.org/index.pl?node=Perl%20Poetry Perl Monks]網站發表。<ref>{{Cite web |url=http://www.perlmonks.org/?node_id=451207 |title=| The Lighter Side of Perl Culture (Part V): Poetry |access-date=2015-11-19 |archive-url=https://web.archive.org/web/20151119184813/http://www.perlmonks.org/?node_id=451207 |archive-date=2015-11-19 |dead-url=no }}</ref>
=== JAPH ===
[[JAPH|Just another Perl hacker]](另一个Perl黑客)是一个和[[国际C语言混乱代码大赛]]有着相同精神的社区文化。Perl[[程序员]]通过写[[JAPH]]代码,来分享自己的编程技术。<ref>{{Cite web |url=http://www.perlmonks.org/?node_id=412464 |title=| The Lighter Side of Perl Culture (Part II): JAPH |access-date=2015-11-19 |archive-url=https://web.archive.org/web/20151119175519/http://www.perlmonks.org/?node_id=412464 |archive-date=2015-11-19 |dead-url=no }}</ref>
== 競爭對手 ==
因為許多Perl程序的代碼難以閱讀,加上它的[[面向对象程序设计|面向对象]]功能被視為不是真正的面向对象(只是模組的模擬),於是很多人拿Perl和其他動態語言來比較。
最常見的比較對象是[[Python]],有人寫了篇文章叫[http://www.garshol.priv.no/download/text/perl.html What's wrong with Perl],指出Perl的缺點,鼓勵別人學Python。著名[[黑客]][[埃里克·斯蒂芬·雷蒙]]寫[http://www.linuxjournal.com/article.php?sid=3882 Why Python?],該文中一個重要的比較對象就是Perl。[http://www.swaroopch.com/notes/python/ A Byte Of Python]里的[http://www.ibiblio.org/swaroopch/byteofpython/read/why-not-perl.html Why Not Perl?] 也把Python和Perl比较。
[[Ruby]]的作者([[松本行弘]],Matz)甚至直認他想Ruby作為Perl的後繼者。<ref>「我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。」--摘錄自[http://blog.csdn.net/eiffelqiu/archive/2004/02/04/19869.aspx O'Reilly訪問Matz。] {{Wayback|url=http://blog.csdn.net/eiffelqiu/archive/2004/02/04/19869.aspx |date=20090728061954 }}</ref>
== [[Raku]](旧名Perl 6) ==
[[File:Camelia.svg|缩略图|右|200px|''Camelia'',Raku项目的标志<ref>{{cite web | url = http://perl6.org/ | title = Perl 6 | accessdate = 2011-02-27 | publisher = The Perl 6 Project | archive-url = https://web.archive.org/web/20110221094526/http://perl6.org/ | archive-date = 2011-02-21 | dead-url = yes }}</ref>。]]
{{Main|Raku}}
在Perl的官网介绍中,[[Raku]]不是Perl 5的下一个版本,而是与Perl 5并行开发的另一种[[编程语言]]。<ref>{{Cite web |url = https://www.perl.org/about.html |title = About Perl |language = en |accessdate = 2015-11-19 |quote = "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. |archive-url = https://web.archive.org/web/20151106051931/https://www.perl.org/about.html |archive-date = 2015-11-06 |dead-url = no }}</ref>
Raku更好地支持面向对象,有专用于定义类的語法:
<syntaxhighlight lang="perl">
class Foo is Universal { # inherit form Universal
has $.member_variable
method member_function {
print "some string";
}
}
</syntaxhighlight>
Raku可以明确定义变量类型,当类型不匹配,编译时报错<ref>{{Cite web|url=http://perlgeek.de/en/article/5-to-6#post_02|title=Perl 5 to 6|access-date=2012-07-04|archive-url=https://web.archive.org/web/20120703045300/http://perlgeek.de/en/article/5-to-6#post_02#post_02|archive-date=2012-07-03|dead-url=no}}</ref>。
另外,Raku提供了不同的[[正则表达式]]语法,新的语法称作「規則」,并且允许使用者在正则表达式中加入空格等以便阅读,还可以命名一个正则表达式方便调用<ref>{{Cite web|url=http://perlgeek.de/en/article/5-to-6#post_07|title=Perl 5 to 6|access-date=2012-07-04|archive-url=https://web.archive.org/web/20120703045300/http://perlgeek.de/en/article/5-to-6#post_07#post_07|archive-date=2012-07-03|dead-url=no}}</ref>。
Raku中的控制流程和循环的判断条件的括号可选:
<syntaxhighlight lang='perl'>
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;
}
</syntaxhighlight>
但是如果加入括號,不能緊跟在关键字后面,而要空一格,因为用foo()這樣的形式,编译器识别为调用函数foo,而不管它是不是关键字<ref>{{Cite web|url=http://perlgeek.de/en/article/5-to-6#post_23|title=Perl 5 to 6|access-date=2012-07-04|archive-url=https://web.archive.org/web/20120703045300/http://perlgeek.de/en/article/5-to-6#post_23#post_23|archive-date=2012-07-03|dead-url=no}}</ref>:
<syntaxhighlight lang='perl'>
if ($hour > 22) { #正確
say 'should sleep...';
}
if($hour > 22) { #錯誤
say 'should sleep...';
}
</syntaxhighlight>
== 参考文献 ==
{{Reflist|2}}
== 參見 ==
* [[CPAN]]
* [[Perl 6]]
* [[Parrot虚拟机]]
== 外部链接 ==
{{div col|cols=2}}
* [http://www.perl.com Perl.com](O'REILLY)
* [http://www.perl.org Perl.org]
* [http://dev.perl.org/perl6/ Perl 6的開發網頁] {{Wayback|url=http://dev.perl.org/perl6/ |date=20060207094455 }}
* [http://www.cpan.org CPAN - Comprehensive Perl Archive Network] {{Wayback|url=http://www.cpan.org/ |date=20110226063250 }}:Perl程式的集中地
* [http://search.cpan.org CPAN检索] {{Wayback|url=http://search.cpan.org/ |date=20180624041928 }}
* [https://web.archive.org/web/20040815062127/http://dmoz.org/Computers/Programming/Languages/Perl/ dmoz on Perl]
* [http://www.pm.org Perl Mongers]:全球各地的使用者組織
* [http://www.perlmonks.org Perl Monks]:一个很活跃的Perl社区
* [http://activestate.com/ ActiveState]:[[Microsoft Windows]]上的Perl
* [http://strawberryperl.com/ Strawberry Perl]:由Perl社群所提供之[[Microsoft Windows]]版Perl
* [https://web.archive.org/web/20070707003455/http://perlcabal.org/syn/Differences.html Perl6::Perl5::Differences]
=== 中文資源、社群 ===
* [https://web.archive.org/web/20110210165809/http://perl.org.tw/ Perl@Taiwan]{{zh-tw}}
* [https://web.archive.org/web/20110824135548/http://planet.perl.tw/ Perl TW Planet]{{zh-tw}}
* [https://web.archive.org/web/20130520084210/http://perl.hcchien.org/toc.html Perl學習手札]{{zh-tw}}
* [http://sites.google.com/site/pmhk2nd/ 香港Perl推廣组]{{zh-hk}}
* [https://web.archive.org/web/20180814141142/http://www.perlchina.org/ 中国Perl协会]{{zh-cn}}
* [https://archive.is/20130503092526/http://wiki.perlchina.org/ 中国Perl协会的wiki]{{zh-cn}}
=== 英文資源、社群 ===
* [http://search.cpan.org/dist/Char-GB18030/ GB18030源码过滤软件]{{en}}
* [http://search.cpan.org/dist/Char-GBK/ GBK源码过滤软件]{{en}}
* [http://search.cpan.org/dist/Char-Big5Plus/ Big5Plus源碼過濾軟件]{{en}}
* [http://search.cpan.org/dist/Char-EUCTW/ EUC-TW源碼過濾軟件]{{en}}
* [http://search.cpan.org/dist/Char-Big5HKSCS/ Big5-HKSCS源碼過濾軟件]{{en}}
{{div col end}}
{{程序设计语言|Perl}}
{{Authority control}}
[[Category:Perl| ]]
[[Category:LAMP]]
[[Category:模式匹配编程语言]]
[[Category:面向文本编程语言]]
[[Category:1987年建立的程式語言]]