社区编辑申请
注册/登录
不再流行的Perl,会消失吗? 原创
开发
时至今日,开发者对于Perl的评价却是两极分化的:有人会郑重地纪念它的生日,有人却希望它快点“死去”。

作者:莫奇

审校:武穆

近日,Perl 5.36正式发布,新版本带来了许多便利的功能。Perl可以说是全球最常用的语言之一,在它全盛的时代,人们会经常用它开发网络程序,但时至今日,开发者对于Perl的评价却是两极分化的:有人会郑重地纪念它的生日,有人却希望它快点“死去”。

不可否认的是,Perl已经不再流行。从TIOBE 6月编程语言排行榜就可见端倪。大家更多关注的是时下最热门的语言,虽然Perl也是榜上有名的,但非常遗憾的是,Perl位列第17名(前20名的下游位置),几乎没有人会在讨论最佳编程语言时提到它。

TIOBE 6月编程语言排行榜(1-20名)

据了解,本次发布的Perl 5.36是自Perl 5.34以来较大的一次版本更新。更新后的Perl也给开发者带来了更良好的使用体验。比如新增的use x.xx 功能省略了代码顶部繁琐的功能模块声明;此外,稳定了布尔跟踪、正则表达式集、支持Unicode 14.0等功能;还增加了内置函数、单次迭代多个值、try/catch语法支持 finally 关键字等实验性功能。

也许很多人会问:这次版本更新能否挽救日渐没落的Perl?不再流行的Perl会逐渐消失吗?

三十余年坎坷路,Perl 7还在远方

编程语言Perl是“Practical Extracting and Reporting Language”的缩写,意为实用提取和报告语言。Perl的功能丰富,可以在超过100种计算机平台上运行。Perl最初是为文本处理而开发的,现在则多用于各种任务,包括网络编程、Web开发、系统管理、GUI开发等。

1987年12月18日,Perl 1.0正式发布,其最初的设计者是拉里·沃尔(Larry Wall)。Perl语言借鉴了C、Sed、awk、shell脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。

Perl 2.0在1988年6月发布,Perl 3.0和Perl 4.0则分别在1989和1991年发布。1994年发布的Perl 5是最重要的一个版本,这个版本也成为使用最为广泛的版本。

2015年12月25日,开发了十多年的Perl 6在圣诞节正式发布。Larry Wall以Perl 6吉祥物Camelia的名义宣布Perl 6可以在产品中使用,但强调其仍然处于青春期,意味着它有几分成熟了,但依然存在一些问题。

进入到第四个十年的Perl,在这些年经历了太多的起起落落。根据Perl指导委员会的说法,尽管5.36.0的最终版本“指日可待”,但万众期待的Perl 7继续在远处闪烁。

Perl:不止一种方法可以做到

Perl是一种自然和智能语言,它能根据上下文环境解释执行,同时有大量省略写法。Perl语言的座右铭是:There’s More Than One Way To Do It (TMTOWTDI,有多种方法可以完成一件事,或者“条条道路通罗马”)。

如果你想使用sed、awk或sh来解决问题,但是却发现它们的能力不够,或者想运行得更快一点,却不想傻傻地用C来写,Perl将是很好的选择。Perl擅长于文本处理和系统管理,不适合于实时嵌入式系统编程、操作系统底层开发(比如驱动程序开发)、复杂的多线性共享内存应用以及较大的应用。

Perl拥有动态语言强大灵活的特性,并且从C/C++、Basic、Pascal等语言中分别借鉴了语法规则,从而可以提供很多冗余语法。或许正因如此,它被评价为“write-only”——虽然你可以写得很随意,但是可能会得到意料之外的结果而不报错。除此之外,让程序员感到头疼的还有它冗长的程序代码,实现相同功能的程序代码长度可能相差十倍百倍。

事实上,人们现在更习惯使用Perl来写服务器脚本。与多数的网页编程语言(PHP或JavaScript)相比,Perl是可以直接执行的。为了使源代码能够被直接翻译成机器语言,它在执行每一行代码之前都先翻译,因此省去了编译的时间。

Perl最强的一点在于,它可以执行用其他计算机语言所编写的代码或子程序。此外,它还能够利用处理器,让开发者可以在海量的库和模块中任意挑选;并且适用于各类数据库管理,支持SQL语句查询,通过DBI模块对返回结果进行处理。

另一个为人称赞的是,Perl只有三种数据类型,标量(scalar)、数组和哈希。其中,标量是最简单的数据类型,一般是指单个数字、整数、文本或者引用。一连串的标量可以有不同的处理方式,通常被称为数组。以特定形式将值键组合的数据形式被称为哈希。在Perl中,值键用标量表示,而类型则以文本字符串的形式表示。

下面罗列了一些关于Perl语言的优势与不足:

Perl语言的优势: 

*正则表达式:Perl最擅长的一件事,就是文本操作。许多语言都有正则表达式,但Perl几乎是他们的发明人。并且它是内置的,不需要任何模块。

*灵活性:Perl具有三种基本的变量类型:标量、数组和哈希。你可以随意使用所有引用,而不必担心内存泄漏或整个PC崩溃的情况。

*Unicode支持(相对AWK与C) 

*可移植性:Perl在网络上运行良好。它在UNIX中效果很好。它甚至在Windows中也能很好地工作。它不是单一功能,而是“万事通”。

*CPAN:你可以找到所有你需要的东西。此外,通过CPAN安装任何模块都非常容易。直接从CPAN安装,在解决依赖关系方面,它与apt-get一样出色。

不足之处在于: 

*动态类型语言,不是很可靠;

*自然语言,是优点也是缺陷,使得Perl语言代码可能晦涩难懂; 

*智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断,也因此产生很多编程陷阱;

*不是很优美,多种方法做事,有时会让编程者无所适从。 

*性能问题,Perl灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要高性能的处理,有时需要使用其它语言重写。 

Perl语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl程序了,然而要深入掌握Perl,要使用Perl的复杂数据结构,进行面向对象编程、多线程编程则不是那么容易的事,需要很长的时间去学习和实践。 

Perl会消失吗?

十多年前,就有人问过类似这种问题,但是事到如今,Perl依然活得很好,并没有消失。Perl在文本处理、数据挖掘、运维、生物信息等众多领域均有不错的应用,只是它不像互联网热点被人们所关注罢了。

客观来说,Perl本身是一门古老的语言,但它拥有一个生机勃勃且生产效率很高的社区,其价值体现在CPAN库中。正如程序员Rox所说,几乎没有任何一种语言具有像CPAN一样广泛和全面的库,一切都近在咫尺。在CPAN中,你可以找到成千上万的模块和框架,并通过它们来完成你想象的任何事情。

需要网络服务器吗?有HTTP :: Server;需要一个独立的数据库吗?有Muldis :: DB。无论你的需求是什么,通常都可以找到几个满足您需求的模块,你只需要选择最适合你的应用程序的模块即可。

Rox表示,至于Ruby,Python和其他竞争对手,健康的竞争对Perl来说是巨大的好事。其他语言得到的任何东西,Perl社区都用Perl重写。例如,当Ruby在Rails的成功上飞速发展时,Perl有了Dancer,在许多方面都比Rails更好。

Perl不会死,也不会消失。周围没有什么浮华的事情,没有公司可以从炒作Perl中受益,因此它并没有引起媒体的广泛关注,也不是每个人都知道Perl,所以对此的讨论也较少。

另需说明的是,尽管Perl可能并不适用于应用类的开发,或者做CGI的Web开发,但是作为脚本语言在数据挖掘、Linux系统管理等偏重于面向过程的文本处理分析方面,仍然是非常顺手的工具,并且有很多自动化测试领域的工具都是Perl写的,所以Perl还是会活得好好的,只是逐渐淡出了为人们所熟知的Perl CGI开发而已。

开发者对Perl的评价

(图源:QA Stack)


(图源:知乎)


写在最后

客观来说,Perl仍然存在较大的价值和潜力,但也不得不承认它现在陷入了困境。未来,如果在不影响向后兼容性的情况下对其进行现代化改造,保持向后兼容性,促使它更易于使用现代功能,或许就能激发这门语言的更大潜力。正如程序员Nikos Vaggalis所说,无论什么情况下,Perl的长寿和繁荣都是有保证的。大家是如何看待Perl语言的?欢迎在下方留言讨论。


参考链接:

https://www.i-programmer.info/programming/perl/15105-perl-turns-34-a-retrospective.html?start=1

https://www.theregister.com/2022/05/26/perl_v7/

https://www.tiobe.com/tiobe-index/


责任编辑:莫奇 来源: 51CTO技术栈
相关推荐

2022-06-07 10:09:42

新技术人工智能5G

2022-06-22 10:23:42

互联网用户IE浏览器退休

2022-06-28 09:26:25

Python配置文件

2022-06-27 09:54:38

编程语言JavaC++

2022-06-17 09:08:27

代码Python内置库

2022-06-24 11:34:38

云计算应用安全

2022-05-09 11:19:12

CSS函数开源

2022-06-08 21:08:22

微信朋友圈

2022-05-24 13:08:55

GNOMEKDELinux

2022-06-21 14:30:16

Vim自定义Linux

2022-05-25 14:02:08

远程办公

2022-06-07 17:01:31

UI框架前端

2022-06-01 12:21:26

安全事件零信任

2022-06-08 09:11:55

测试代码开发

2022-05-17 08:39:05

VueViteTypeScript

2022-06-07 14:15:44

Vue开发工具

2022-05-23 13:36:02

机器人核酸

2022-06-02 12:00:55

ClickHouse大数据字节跳动

2022-05-18 23:42:08

网络安全安全分析工具

2022-06-02 15:31:26

深度学习AI

同话题下的热门内容

源码探秘:Python 中对象是如何被调用的?使用Java和Python进行数据统计和分析C++与Java“相爱相杀”:一个步步紧逼,一个节节败退GitHub这五个骚操作,99%的人不知道!裁员真能拯救中国互联网?吐血推荐17个提升开发效率的“轮子”哪个版本的JVM最快?Flask vs Django: 该如何选择Python框架?

编辑推荐

2017年9月编程语言排行榜:Java、C与C++三巨头还能统治排行榜多久?2017年最受欢迎的5个前端框架比较2017年11月编程语言排行榜:脚本语言怎么了?2017年3月编程语言排行榜:Swift首次进入前十最近租房有点烦!技术人如何用Python找到称心如意的“小窝”?
我收藏的内容
点赞
收藏

51CTO技术栈公众号