perlfaq1 - 关于 Perl 的一般问题
版本 5.20210520
常见问题解答的这一部分回答了关于 Perl 的非常一般、高级别的疑问。
Perl 是一种高级编程语言,具有折衷的传统,由 Larry Wall 和成千上万的人编写。
Perl 的进程、文件和文本处理工具使其特别适合于涉及快速原型制作、系统实用程序、软件工具、系统管理任务、数据库访问、图形编程、网络和 Web 编程的任务。
Perl 源自无处不在的 C 编程语言,在较小程度上源自 sed、awk、Unix shell 和许多其他工具和语言。
这些优势使其在 Web 开发人员和系统管理员中特别受欢迎。数学家、遗传学家、记者、经理和许多其他人也使用 Perl。
前民粹主义互联网的原始文化和 Perl 作者 Larry Wall 的根深蒂固的信念催生了 Perl 的免费和开放分发政策。Perl 由其用户提供支持。核心、标准 Perl 库、可选模块和您现在正在阅读的文档都是由志愿者编写的。
核心开发团队(称为 Perl Porters)是一群高度利他主义的个人,致力于免费制作比您希望花钱购买的更好的软件。您可以通过 存档 窥探正在进行的开发,或者您可以通过向 [email protected] 发送订阅请求(无主题的空消息即可)来订阅邮件列表。
虽然 GNU 项目在其发行版中包含 Perl,但没有“GNU Perl”这样的东西。Perl 不是由自由软件基金会制作或维护的。Perl 的许可条款也比 GNU 软件的许可条款更开放。
如果您愿意,可以获得 Perl 的商业支持,尽管对于大多数用户来说,非正式支持已经足够。有关更多信息,请参阅“我可以在哪里购买 Perl 的商业版本?”的答案。
(由 brian d foy 贡献,并由其他人更新)
通常是见仁见智的问题,没有一个答案适合所有人。一般来说,您需要使用当前的稳定版本或紧接该版本之前的稳定版本。
除此之外,您必须考虑几件事并决定哪种最适合您。
如果某些内容完好无损,升级 perl 可能会破坏它们(或至少会发出新的警告)。
最新版本的 perl 具有更多错误修复。
最新版本的 perl 可能包含性能改进和旧版本中没有的功能。自 perl5 首次推出以来,perl 已经发生了许多变化。
Perl 社区致力于支持最新版本,因此您将更容易找到对这些版本的帮助。
最新版本可能是部署和广泛测试最少的版本,因此如果您厌恶风险,您可能需要在其发布后等待几个月,看看其他人遇到了什么问题。
除了当前稳定版本之外,还维护着之前的稳定版本。有关更多信息,请参阅 perlpolicy 中的“维护和支持”。
perl 开发实际上有两条轨道:维护版本和实验版本。维护版本是稳定的,次要版本号为偶数(即 perl5.24.x,其中 24 是次要版本号)。实验版本可能包含未进入稳定版本的特性,次要版本号为奇数(即 perl5.25.x,其中 25 是次要版本号)。
您可以查阅 版本 以确定 Perl 的当前稳定版本。
简而言之,Perl 4 是 Perl 5 和 Raku(以前称为 Perl 6)的父代。Perl 5 是较早的兄弟,虽然它们是不同的语言,但了解其中一种语言的人会发现另一种语言中有许多相似之处。
Perl 后面的数字(即 Perl 5 中的 5)是 perl 解释器的主要版本以及该语言的版本。每个主要版本都有早期版本无法支持的重大差异。
Perl 的当前主要版本是 Perl 5,于 1994 年首次发布。它可以运行前一个主要版本 Perl 4(1991 年 3 月)的脚本,但有重大差异。
Raku 是 Perl 的重新发明,它是一种具有相同血统但又不兼容的语言。两者是互补的,而不是相互排斥的。Raku 并不是为了取代 Perl,反之亦然。请参阅下面的 “什么是 Raku(Perl 6)?” 以了解更多信息。
请参阅 perlhist 以了解 Perl 修订历史。
Raku(以前称为 Perl 6)最初被描述为社区对 Perl 的重写,但随着语言的发展,很明显它是一种独立的语言,但属于与 Perl 相同的语言系列。
Raku 并非主要用作 Perl 的替代品,而是作为其自己的东西 - 并且存在库允许您从 Raku 程序调用 Perl 代码,反之亦然。
与流行的看法相反,Raku 和 Perl 可以和平共存。Raku 已被证明是 Perl 使用者(Moose 对象系统就是一个众所周知的例子)的创意的迷人来源。社区之间存在重叠,这种重叠促进了对 Perl 成功至关重要的分享和借鉴的传统。
有关 Raku 的更多信息,请参阅 https://www.raku.org/。
“我们非常认真地重新发明需要重新发明的一切。”——Larry Wall
包含错误修复和新功能的生产版本在发布之前会经过广泛测试。自 5.000 版本以来,我们平均每年发布一个生产版本。
Perl 开发团队偶尔会对语言的内部核心进行更改,但会尽一切努力向后兼容。
最近,计划是大约每年的 4 月发布一个新版本的 Perl,但正确发布比严格遵守日历日期更重要,因此发布日期具有一定的灵活性。历史发布日期可以在 http://www.cpan.org/src/README.html 查看。
偶数次要版本(5.14、5.16、5.18)是生产版本,奇数次要版本(5.15、5.17、5.19)是开发版本。除非您想试用实验性功能,否则您可能永远不想安装 Perl 的开发版本。
Perl 开发团队称为 Perl 5 Porters,其组织在 https://perldoc.perl5.cn/perlpolicy.html 中进行了描述。组织规则实际上归结为一个:Larry 总是对的,即使他错了。
不,Perl 很容易开始 学习——并且很容易继续学习。它看起来像您可能已经使用过的大多数编程语言,因此,如果您曾经编写过 C 程序、awk 脚本、shell 脚本,甚至 BASIC 程序,那么您已经完成了一半了。
大多数任务只需要 Perl 语言的一小部分。Perl 开发的一个指导格言是“完成它的方法不止一种”(TMTOWTDI,有时发音为“tim toady”)。因此,Perl 的学习曲线很平缓(易于学习)且很长(如果您真的想的话,有很多事情可以做)。
最后,由于 Perl 经常(但并非总是,当然也不是根据定义)是一种解释型语言,因此您可以编写程序并在没有中间编译步骤的情况下对其进行测试,从而使您可以快速轻松地进行实验和测试/调试。这种实验的简便性进一步降低了学习曲线。
使 Perl 更容易学习的事物:Unix 经验、几乎任何类型的编程经验、对正则表达式的理解以及理解他人代码的能力。如果您需要完成某项任务,那么它可能已经完成,并且通常可以免费获得一个工作示例。也不要忘记 Perl 模块。它们在本文档的第 3 部分中进行了讨论,以及在第 2 部分中讨论的 CPAN。
Perl 可用于几乎任何编码问题,即使是需要集成专业 C 代码以提高速度的问题。与任何工具一样,它都可以很好地使用或不当使用。Perl 有许多优点和一些缺点,哪些领域好哪些领域不好通常是个人的选择。
在选择语言时,您还应受到围绕它的 资源、测试文化 和 社区 的影响。
对于与特定语言的比较,通常最好用两种语言创建一个小型项目并比较结果,确保使用每种语言的所有 资源,因为语言不仅仅是它的语法。
Perl 足够灵活且可扩展,您几乎可以在任何任务中使用它,从单行文件处理任务到大型复杂系统。
对于许多人来说,Perl 是 shell 脚本的一个很好的替代品。对于其他人来说,它是一个方便的高级替代品,可以替代他们在 C 或 C++ 等低级语言中编程的大部分内容。最终由您(以及可能您的管理人员)决定您将使用 Perl 执行哪些任务,以及哪些任务不使用 Perl。
如果您有一个提供 API 的库,您可以使用用 C 或 C++ 编写的 Perl 扩展程序将其任何组件作为另一个 Perl 函数或变量提供,并动态链接到您的主 perl 解释器中。您还可以反过来,用 C 或 C++ 编写您的主程序,然后动态链接一些 Perl 代码,以创建一个功能强大的应用程序。请参阅 perlembed。
话虽如此,始终会有一些小巧、专注、专门用于特定问题域的语言,它们对于某些类型的问题来说更加方便。Perl 试图成为所有人的万能工具,但对任何人来说都不是特别的东西。想到的专业语言示例包括 prolog 和 matlab。
一个很好的理由是,当您已经有了用另一种语言编写的现有应用程序,并且该应用程序已经完成(并且做得很好),或者您有一个专门为特定任务设计的应用程序语言(例如 prolog、make)。
如果您发现需要加速 Perl 应用程序的特定部分(通常不需要),您可能需要使用 C,但您可以通过 perlxs 从 Perl 代码中访问它。
"Perl" 是该语言的名称。只有 "P" 大写。解释器(运行 Perl 脚本的程序)的名称是 "perl","p" 小写。
您可以选择遵循此用法,也可以不遵循。但永远不要写 "PERL",因为 perl 不是首字母缩写词。
(由 brian d foy 贡献)
JAPH 代表“Just another Perl hacker”(又一位 Perl 黑客),Randal Schwartz 从 20 世纪 80 年代末开始用它来签名电子邮件和 Usenet 消息。他之前在许多主题中使用过这个短语(“Just another x hacker”),因此为了区分他的 JAPH,他开始将它们编写为 Perl 程序
print "Just another Perl hacker,";
其他人也开始编写巧妙或模糊的程序来生成相同的输出,这使事情迅速失控,同时仍然为它们的创建者和读者提供了数小时的娱乐。
CPAN 在 http://www.cpan.org/misc/japh 处有几个 JAPH 程序。
(由 brian d foy 贡献)
诉诸他们的自身利益!如果 Perl 对他们来说是新事物(因此很可怕),请找到 Perl 可以用来解决他们问题中的一个问题的东西。这可能意味着 Perl 为他们节省了一些东西(时间、头痛、金钱)或给了他们一些东西(灵活性、能力、可测试性)。
一般来说,一门语言的好处与使用该语言的人员的技能密切相关。如果您或您的团队可以通过 Perl 变得更快、更好、更强大,那么您将提供更多价值。请记住,人们通常对他们从中获得的东西反应更好。如果您遇到阻力,请找出这些人从其他选择中获得了什么,以及 Perl 如何满足该要求。
您无需担心查找或支付 Perl;它免费提供,并且几种流行的操作系统都附带 Perl。在 Perlmonks(http://www.perlmonks.com)和各种 Perl 邮件列表(http://lists.perl.org)等场所的社区支持意味着您通常可以快速获得问题的答案。
最后,请记住 Perl 可能并非适合每项工作的正确工具。如果您提出的主张合理且切合实际,您将成为一名更好的倡导者。教条地主张任何事情往往会让人们忽视您的信息。对您选择 Perl 的可能缺点保持诚实,因为任何选择都有利弊权衡。
您可能会发现这些链接很有用
版权所有 (c) 1997-2010 Tom Christiansen、Nathan Torkington 和其他注明的作者。保留所有权利。
本文件免费;您可以在与 Perl 自身相同的条款下重新分发和/或修改它。
无论其分发情况如何,此处的所有代码示例均属于公共领域。您被允许且鼓励在您自己的程序中出于娱乐或盈利目的使用此代码及其任何衍生代码,具体视您认为合适的方式而定。在代码中添加一个简单的注释以感谢常见问题解答将是礼貌的,但不是必需的。