柠檬蜂蜜水有什么功效| 血压偏低吃什么| 淋巴细胞升高说明什么| 尿结石吃什么药| 五字五行属什么| 吃青提有什么好处| 暑湿感冒吃什么药| 梦见死鸡是什么预兆| 看病人买什么| 吃什么东西补血最快最有效| 误喝碘伏有什么伤害吗| 发配是什么意思| 油面筋是什么做的| 用字五行属什么| 毒鸡汤是什么意思| 4月9日什么星座| 用什么泡水喝对肝脏好| 指甲月牙代表什么| 为什么发烧会觉得冷| h7n9是什么病毒| 离子检测是检查什么| 清胃火吃什么药| 脚脖子疼是什么原因| 舌头溃疡用什么药| angelababy英文什么意思| 马女和什么属相最配| 报考军校需要什么条件| 蜕膜是什么| 口干口臭是什么原因引起的| 多喝白开水有什么好处| 睡觉爱流口水是什么原因| 计算机二级什么时候查成绩| 钅读什么偏旁| 款款是什么意思| 指甲变薄是什么原因| 虚岁27岁属什么生肖| 什么地什么| 线索细胞阳性什么意思| 现在是什么意思| 绣眼鸟吃什么| 揣测是什么意思| 什么是阳萎| 尿酸高可以吃什么水果| 紫苏叶有什么作用| 一年四季是什么生肖| 为什么夏天容易掉头发| 脑血管狭窄吃什么药| 男人左眼跳是什么预兆| 梦见菊花是什么意思啊| 女生被摸胸是什么感觉| 指甲有白点是什么原因| 圣诞节送孩子什么礼物好| 泡泡像什么| 什么茶不能喝| 头晕头疼挂什么科| police是什么意思| Fish什么意思| 男人跑马是什么原因| 四什么八什么| 槟榔中间的膏是什么| 羁什么意思| 迪奥是什么| 爱钻牛角尖是什么意思| 肚脐叫什么穴位| 农历五月的别称是什么| 七月份怀孕预产期是什么时候| 执业药师什么时候考试| 青是什么颜色| 马蜂菜什么人不能吃| 洋溢着什么样的笑容| 婴儿游泳有什么好处和坏处| 精神慰藉什么意思| 窦性心动过缓是什么病| 咳嗽有血是什么原因| 长胸毛的男人代表什么| 洛神花是什么| 舒筋健腰丸主治什么| 老巫婆是什么意思| 12580是什么号码| 自身免疫性肝病是什么意思| 梦见找对象是什么意思| cab是什么意思| 我国四大发明是什么| 亥时右眼跳是什么预兆| 正山小种属于什么茶类| 长命百岁是什么意思| 包公是什么意思| 吃什么可以抗衰老| 梦见洗鞋子是什么意思| 心情烦躁吃什么药| 老公生日送什么礼物好| 怀孕肚皮痒是什么原因| 天秤座什么象| 糖衣炮弹什么意思| 内鬼是什么意思| ect是什么检查| 冰粉是用什么做的| 什么不什么| 一金有什么用| 做什么运动可以长高| pdrn是什么| 头皮屑是什么| 脸黄是什么原因造成的| 后背痛是什么病的先兆| 为什么口腔溃疡| 投喂是什么意思| 左腰疼痛是什么原因男性| 肉芽是什么| 后脑勺出汗多是什么原因| 什么泡水喝可降血压| 什么方法可以促进睡眠| nlp是什么意思| 尿酸高吃什么水果| 决明子泡水喝有什么功效| 糖尿病吃什么| 甲抗是什么原因引起的| 蛇舌草有什么功效| cfa是什么证书| 包皮开裂擦什么药膏| 11点半是什么时辰| 怀孕能吃什么| 梦见和妈妈吵架是什么意思| 南辕北辙是什么故事| 为什么指甲有竖纹| 1958年属狗的是什么命| 洛阳有什么山| 妊娠期是指什么时候| 塑料袋属于什么垃圾| 反清复明是什么意思| 珙桐是什么植物| 低钠盐适合什么人吃| 云为什么不会掉下来| 外伤用什么消炎药| 抗氧化什么意思| 光圈是什么| 冲击波治疗有什么效果| 市值是什么意思| 学分是什么意思| dmd是什么意思| 表妹是什么意思| 10.22是什么星座| ckmb是什么意思| 印度尼西亚是什么人种| 云南白药的保险子是起什么作用的| 沉香有什么作用与功效| 孕妇梦见西瓜是什么意思| 此言差矣是什么意思| 残月是什么意思| 557是什么意思| 戏子是什么意思| 地格是什么意思| 大脑供血不足是什么原因引起的| 愧疚是什么意思| 萎缩性胃炎吃什么药好| 肾病可以吃什么水果| 卷发适合什么脸型| 生物素是什么| 毛的部首是什么| 洋葱为什么会让人流泪| 8月21日是什么星座| 精油是干什么用的| 什么动物眼睛最大| 脾虚湿气重吃什么中成药| 女人喝咖啡有什么好处和坏处| 黄芪主要治疗什么| 甘油是什么| 补铁有什么好处| 喝断片了是什么意思| 患难见真情的上一句是什么| 冠脉ct能检查出什么| 什么病不能吃阿胶| 卧榻是什么意思| 杜冷丁是什么| delvaux是什么牌子| 株连九族是什么意思| 政协副主席是什么级别| 桃花眼的女人什么命| 冠心病什么症状表现| 过度紧张会有什么症状| 人体最大的消化腺是什么| 阴茎破皮擦什么药| 小孩手麻是什么原因| 胃疼吃什么食物对胃好| 什么叫末法时代| 尿中红细胞高是什么原因| 丸吞是什么意思| 吃什么养肝护肝最好| 下嘴唇起泡是什么原因| 缺陷的陷是什么意思| 紫微星是什么意思| 未成年改名字需要什么手续| 等离子体是什么| 吃什么能美白| 心肌受损会出现什么症状| 副处是什么级别| 属猪生什么属相宝宝好| 2月29日是什么星座| 泼皮是什么意思| 血糖高能吃什么菜| 美瞳是什么| 白脉病是什么病| 假体是什么| 为什么上小厕会有刺痛感| 知天命是什么意思| tf口红属于什么档次| 耳鸣什么原因引起的| 十八大什么时候召开的| 小李子为什么叫小李子| 面肌痉挛吃什么药效果好| 脑白质疏松症是什么病| pnh是什么病的简称| 小孩抽动症是什么引起的| 生日可以送什么礼物| 荔枝什么时候成熟| 心肌标志物是查什么的| 答辩是什么| 无限未来为什么不写了| 副镇长是什么级别| 痔疮应该挂什么科室| 什么茶降火| 滑膜炎用什么药治疗最好最快| grp是什么意思| 蛇属于什么动物| 嘴巴长疱疹是什么原因| 消化不良吃什么水果| 多汗症挂什么科| 脑残是什么意思| 这个季节种什么菜合适| 亚麻籽是什么植物| 补气养血吃什么中成药| 镜检是什么| classic是什么牌子| 荔枝肉是什么菜系| 文胸是什么意思| 心率低有什么症状| 头发油腻是什么原因| 2月16号是什么星座| 嗯嗯什么意思| 霉菌性中耳炎用什么药| 顺钟向转位是什么意思| 拉尿有泡沫是什么原因| 打篮球对身体有什么好处| 同房后出血什么原因| 睡眠时间短是什么原因| 开铲车需要什么证件| 减肥期间晚上吃什么| 梦见狗咬我是什么意思| 脖子老出汗是什么原因| bk病毒是什么| 德巴金是什么药| 鳄鱼怕什么| 胃寒胃凉吃什么药| 便秘吃什么最快排便小孩| 阴阳先生是干什么的| 般若波罗蜜是什么意思| 人流挂什么科| 胃下面是什么器官| 大便蛋花状是什么原因| 李世民是什么民族| 指征是什么意思| 狗狗的鼻子为什么是湿的| 猴子是什么颜色| 女性腰疼去医院挂什么科| 家五行属什么| 百度跳转到内容

江西交通信息网被评为交通运输行业优秀政府网站

本页使用了标题或全文手工转换
维基百科,自由的百科全书
Perl
编程范型多重编程范式函数指令式面向对象 (基于类)、反射过程式事件驱动泛型
设计者拉里·沃尔
实现者拉里·沃尔
发行时间2025-08-05,?37年前?(2025-08-05
当前版本
  • 5.42.0(2025-08-05;稳定版本)[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高阶通用解释型动态编程语言家族。最初设计者拉里·沃尔为了让在UNIX上进行报表处理的工作变得更方便,决定开发一个通用的脚本语言,而在2025-08-05发表。目前,Perl语言家族包含两个分支Perl 5以及Raku

关于Perl名字的由来,有很多说法。虽然Perl不是正式的首字母缩略词[8],但仍有各种各样的逆向首字母缩略词,包括“实用的提取和报告语言”。[9]

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

2000年开始,拉里·沃尔着手开发Perl 6来作为Perl的后继,Perl 6语言的语法有很多转变,也被视为Perl家族中的另一个语言(Perl 6于2019年更名为Raku)。[10]

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

历史

[编辑]

早期版本

[编辑]

拉里·沃尔在1987年开始写作Perl,那时他正在Unisys程序员[12],并且在2025-08-05把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于2025-08-05发布[15]。这是一个几乎完全重写了的解释器,而且它给这个语言添加了很多新的特性,包括对象,引用,局部变量,和模块。很重要地,模块提供了一个不用修改直译器就可以扩展语言的方法。这使得核心的直译器非常稳定,即使它允许一般的Perl程序员添加新的语言特性。从此,Perl 5的开发就活跃起来了。

Perl 5.001于2025-08-05发布。Perl 5.002于2025-08-05发布,带有参数类型的特性。这允许模块的作者写出像Perl内部命令那样智能的子程序。Perl 5.003于2025-08-05作为一个安全更新的版本发布。

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

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

Perl具有优秀的跨平台特性。Perl现在支持在Microsoft Windows、苹果公司的MacOSGNU/Linux和其它一些操作系统下运作[17]

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

2000年至今

[编辑]
主要版本 最后更新[20]
旧版本,不再支持: 5.5 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.6 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.8 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.10 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.12 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.14 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.16 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.18 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.20 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.22 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.24 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.26 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.28 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.30 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.32 2025-08-05 (2025-08-05)
旧版本,不再支持: 5.34 2025-08-05 (2025-08-05)
旧版本,仍被支持: 5.36 2025-08-05 (2025-08-05)
当前版本: 5.38 2025-08-05 (2025-08-05)
格式:
旧版本
旧版本,仍被支持
当前版本
最新预览版本
未来版本

Perl 5.6于2025-08-05发布。大的修改包括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最初于2025-08-05发布,从此,每年才有一次更新。Perl 5.8的最后一版是5.8.9,发布于2025-08-05。Perl 5.8改进了Unicode支持,添加了一个新的IO处理机制和新的多线程处理,提高了数字精度,添加了一些新模块[24]

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

2025-08-05,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个月以内的发布日期。

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

Perl 5.14发布于2025-08-05。这个分支的最后一版,5.14.2,发布于2025-08-05。

Perl 5.16发布于2025-08-05。显著的新特性包括可以指定一个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 MongersPerlMonks,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->();

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

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; #每行打印group里的一个元素

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

Perl的应用

[编辑]

Perl使用非常广泛。在UnixGNU/LinuxmacOS中,Perl是内置的系统脚本工具。Perl曾经在网页中(PHPCGI)广泛使用。Perl拥有海量的模块支持,在解决问题时,可以直接安装使用,非常方便。截止2025-08-05,CPAN上发布了大约266,924个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编译的诗。新的诗经通常会在[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]

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-08-05 [2025-08-05]. 
  2. ^ The "Artistic License" - dev.perl.org. dev.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  3. ^ Artistic页面存档备份,存于互联网档案馆) - file on the Perl 5 git repository
  4. ^ Perl Licensing. dev.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  5. ^ perl 5.36.0 is now available. www.nntp.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  6. ^ Perl 5.34.1 is now available!. www.nntp.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  7. ^ perl 5.37.0 is now available. www.nntp.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  8. ^ Lapworth, Leo. General Questions About Perl. Perl FAQ. [February 24, 2012]. (原始内容存档于2025-08-05). 
  9. ^ perl(1): Practical Extraction/Report Language - Linux man page. Linux.die.net. [2025-08-05]. (原始内容存档于2025-08-05). 
  10. ^ Perl Core Development - Perl 6. [2025-08-05]. (原始内容存档于2025-08-05). 
  11. ^ Sheppard, Doug. Beginner's Introduction to Perl. O'Reilly Media. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05). 
  12. ^ Wall, Larry. Programming Perl. Beijing; Cambridge, Mass.: O'Reilly. 2000 [2025-08-05]. ISBN 978-0-596-00027-1. 
  13. ^ comp.sources.unix. Google. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05). 
  14. ^ perl.perl5.porters archive. perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  15. ^ perlhist - the Perl history records. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  16. ^ CPAN. CPAN. [2025-08-05]. (原始内容存档于2025-08-05). 
  17. ^ 17.0 17.1 perl5004delta - what's new for perl5.004. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  18. ^ Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen. Perl in a Nutshell, Second Edition. O'Reilly Media. 2002 [2025-08-05]. ISBN 978-0-596-00241-1. 
  19. ^ perl5005delta - what's new for perl5.005. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  20. ^ Perl Source. cpan.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  21. ^ perl56delta - what's new for perl v5.6.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  22. ^ perl56delta - what's new for perl v5.6.x. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  23. ^ Wall, Larry. Apocalypse 1: The Ugly, the Bad, and the Good. [2025-08-05]. (原始内容存档于2025-08-05). 
  24. ^ perl58delta - what is new for perl v5.8.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  25. ^ A Plan for Pugs. O'Reilly Media. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05). 
  26. ^ Tang, Audrey. Re: How to Implement Perl 6 in Ten Years. PerlMonks. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05). 
  27. ^ perl5100delta - what is new for perl 5.10.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  28. ^ perlsyn - Perl syntax. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  29. ^ perl5120delta - what is new for perl v5.12.0. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  30. ^ perldelta - what is new for perl v5.12.3. Perl 5 version 12.2 documentation. perldoc.perl.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  31. ^ 31.0 31.1 perldelta - what is new for perl v5.16.0. Perl 5 version 16.0 documentation. search.cpan.org. [2025-08-05]. (原始内容存档于2025-08-05). 
  32. ^ 32.0 32.1 Richardson, Marjorie. Larry Wall, the Guru of Perl. Linux Journal. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05). 
  33. ^ 33.0 33.1 perlfaq1: What's the difference between "perl" and "Perl"?. perldoc.perl.org - Perl 5 version 12.2 documentation. [2025-08-05]. (原始内容存档于2025-08-05). 
  34. ^ Schwartz, Randal. PERL as shibboleth and the Perl community. PerlMonks. [2025-08-05]. (原始内容存档于2025-08-05). 
  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. [2025-08-05]. (原始内容存档于2025-08-05). 
  37. ^ Wall, Larry. Re^7: PERL as shibboleth and the Perl community. PerlMonks. [2025-08-05]. (原始内容存档于2025-08-05). 
  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. [2025-08-05]. (原始内容存档于2025-08-05). 
  40. ^ Index of /images/perl
  41. ^ Intermediate Perl. [2025-08-05]. (原始内容存档于2025-08-05). 
  42. ^ Perl Trademark. The Perl Foundation. [2025-08-05]. (原始内容存档于2025-08-05). 
  43. ^ Can EPO (or TPF) tame TIMTOWTDI?. dev411.com. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05). 
  44. ^ The Lighter Side of Perl Culture (Part V): Poetry. [2025-08-05]. (原始内容存档于2025-08-05). 
  45. ^ The Lighter Side of Perl Culture (Part II): JAPH. [2025-08-05]. (原始内容存档于2025-08-05). 
  46. ^ What's wrong with Perl页面存档备份,存于互联网档案馆
  47. ^ Why Python?. [2025-08-05]. (原始内容存档于2025-08-05). 
  48. ^ A Byte of Python. Swaroop, The Dreamer. 2025-08-05 [2025-08-05]. (原始内容存档于2025-08-05) (美国英语). 
  49. ^ Why Not Perl?页面存档备份,存于互联网档案馆
  50. ^ “我认为Ruby这个名字作为Perl之后的一门语言的名字真是再恰当不过了。”--摘录自O'Reilly访问Matz。页面存档备份,存于互联网档案馆
  51. ^ Perl 6. The Perl 6 Project. [2025-08-05]. (原始内容存档于2025-08-05). 
  52. ^ About Perl. [2025-08-05]. (原始内容存档于2025-08-05) (英语). "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. [2025-08-05]. (原始内容存档于2025-08-05). 
  54. ^ Perl 5 to 6. [2025-08-05]. (原始内容存档于2025-08-05). 
  55. ^ Perl 5 to 6. [2025-08-05]. (原始内容存档于2025-08-05). 

参见

[编辑]

外部链接

[编辑]

中文资源、社群

[编辑]

英文资源、社群

[编辑]
胆囊炎看什么科室 危险期是什么时候 女生的逼长什么样 脸书是什么意思 缺锌有什么症状
灯火通明是什么生肖 80年属什么的 保育员是什么 口里发酸是什么原因 发炎不能吃什么东西
心衰是什么原因引起的 江浙沪是什么意思 酸奶坏了是什么味道 闭合性跌打损伤是什么意思 甲状腺和甲亢有什么区别
腋毛什么时候开始生长 什么鱼最好养不容易死 twin什么意思 单活胎是什么意思 蜱虫咬人后有什么症状图片
褪黑素有什么作用jingluanji.com 洋葱有什么功效hcv8jop1ns4r.cn 皇家礼炮是什么酒hcv9jop4ns1r.cn 树冠是指什么ff14chat.com 高线是什么hcv8jop4ns9r.cn
什么是横纹肌溶解症jasonfriends.com 喝劲酒有什么好处hcv8jop0ns9r.cn 嬴稷是秦始皇的什么人hcv8jop3ns9r.cn 九死一生是指什么生肖hcv9jop5ns7r.cn 起床气是什么意思hcv8jop2ns0r.cn
87年属什么的hcv8jop3ns3r.cn lcu是什么意思hcv7jop5ns5r.cn 脑血管堵塞吃什么药最好hcv8jop4ns2r.cn 脂蛋白是什么意思hcv8jop1ns8r.cn 右侧卵巢内囊性结构什么意思hcv9jop4ns8r.cn
扁平息肉属于什么性质hcv7jop9ns6r.cn 痔疮的症状是什么hcv9jop0ns0r.cn 舌头变肥大什么原因sanhestory.com 做水果捞用什么酸奶好hcv8jop4ns3r.cn 修心是什么意思hcv9jop6ns9r.cn
百度