Perl 7 依然遥遥无期两年前，Perl 语言项目宣布了 Perl 7，与 Perl 6 的激进改变不同，Perl 7 实际上是 Perl 5.32 配上更符合现代趋势的一些默认设置。原计划在 2021 年发布 Perl 7，但显然我们还没见到，甚至没有一个明确的发布时间表。Perl 语言指导委员会还在继续引入新特性，直到某天他们觉得有了足够大的进步才会发布 Perl 7。消息来源：perl老王点评：Perl 当年太成功，但这个成功也成了巨大的包袱，以至于激进的 Perl 6 失败了，继承传统的 Perl 7 也迟迟难产。两年前宣布 Perl 7 的消息时，我还 很期待，但是，虽然不愿意这样说，Perl 不如就让它一直留在 Perl 5 吧，作为历史里程碑挺好。微软将 WSL2 带入 Window Server 20222021 年，为了回应用户提出的将 WSL 向后移植到 Windows Server 2019 的请求，微软说 WSL “对开发来说非常棒”，“对 Windows 客户端来说非常完美”。但又警告说，“如果我们把它放在 Windows Server 中，人们会在生产场景中使用它，而它并不准备用于这种场景”。微软推荐的方式是运行完整的 Linux 虚拟机。但今年，微软的态度在改变，WSL2 发行版已经可以在 Windows Server 2004 和 20H2 版本上运行，而现在，随着最新的预览补丁，Windows Server 2022 现在也支持 WSL2 Linux 发行版了。消息来源：theregister老王点评：微软对 Linux 的野心一点点露了出来，先是一个号称为了开发者方便的子系统，以后就可能是一个集成了完整 Linux 功能和优点的子系统了，并且，可以用于企业生产环境。攻击者窃取了十万 npm 用户账号登录信息攻击者在 4 月中旬的攻击中利用 OAuth 应用令牌窃取了近十万 npm 用户账号登录信息，取得了密码哈希和电邮地址。哈希密码是用弱哈希算法，如加盐 SHA1 生成的，因此容易破解，但好在 GitHub 从 3 月 1 日起对所有账号自动启用了电邮验证，控制账号的尝试会被自动阻止。在分析和检查之后，GitHub 确信攻击者没有修改或上传新版本的 npm 软件包。GitHub 重置了所有受影响用户的密码，并向受影响组织和用户发送了通知。消息来源：solidot老王点评：再强的密码也拦不住平台用脆弱的方式存储。
下载这份编程速查表，开始学习 Perl 的力量。Perl 发布于 1988 年初，是一种后现代的编程语言，它通常被认为是一种脚本语言，但它也能进行面向对象的编程。它是一种成熟的语言，拥有 数以万计的库、GUI 框架，它有一种叫做 Raku 的衍生语言（即 Perl 6），以及一个活跃而热情的社区。它的开发者以其灵活性为荣。根据它的创造者 Larry Wall 的说法，Perl 并不对它的用户强加任何特定的编程风格，而且有不止一种方法来完成大多数事情。Perl 非常健壮，它曾经被广泛使用，这使它成为新的程序员可以尝试的伟大语言。下载 Perl 速查表Perl 基础知识在 Linux 和 macOS 上，你已经安装了 Perl。在 Windows 上，请从 Perl 网站 下载并安装它。Perl 表达式Perl 源代码的基本单位是 表达式，它是任何能返回一个 值 的东西。例如，1 是一个表达式，它返回 1 的值。表达式 2 返回 2 的值，而 a 返回字母 a。表达式可以更复杂。表达式 $a + $b 包含变量（数据的占位符）和加号（+），它是一个数学运算符。Perl 语句Perl 语句是由表达式组成的。每个语句都以分号（;）结束。比如说：$c = $a + $b; 要尝试运行你自己的 Perl 语句，请打开终端并输入：$ perl -e 'print ("Hello Perl\n");' Perl 语句块Perl 语句块可以用大括号（{ }）组合起来。块是一种有用的组织工具，但它们也为那些你可能只需要在程序的一小部分使用的数据提供了 范围。Python 用空白定义范围，LISP 用小括号，而 C 和 Java 用大括号。变量变量是数据的占位符。人类每天都在使用变量而没有意识到它。例如，“它”这个词可以指代任何名词，所以我们把它作为一个方便的占位符。“找到我的手机并把它拿给我”实际上是指“找到我的手机并把我的手机拿给我。”对于计算机来说，变量不是一种便利，而是一种必需品。变量是计算机识别和跟踪数据的方式。在 Perl 中，你通过声明一个变量名称和它的内容来创建变量。在 Perl 中，变量名称前面总是有一个美元符号（$）。这些简单的语句创建了一个包含 "Hello" 和 "Perl" 字符串的变量 $var，然后将该变量的内容打印到终端：$ perl -e '$var = "hello perl"; print ("$var\n");' 流程控制大多数程序需要做出决定，这些选择由条件语句和循环来定义和控制。if 语句是最直观的一种。Perl 可以测试一个特定的条件，然后 Perl 根据这个条件决定程序如何进行。其语法类似于 C 或 Java：my $var = 1; if ($var == 1) { print("Hello Perl\n"); } elsif ($var == 0){ print("1 not found"); } else { print("Good-bye"); } Perl 也有一个简短的 if 语句的形式：$var = 1; print("Hello Perl\n") if ($var == 1); 函数和子程序尽可能多地重复使用代码是一种有益的编程习惯。这种做法可以减少错误（或将错误合并到一个代码块中，因此你只需修复一次），使你的程序更容易维护，简化你的程序逻辑，并使其他开发者更容易理解它。在 Perl 中，你可以创建一个 子程序，它接受输入（存储在一个特殊的数组变量 @_ 中）并可能返回一个输出。你可以使用关键字 sub 来创建一个子程序，后面跟一个你选择的子程序名称，然后是代码块：#!/usr/bin/env perl use strict; use warnings; sub sum { my $total = 0; for my $i(@_){ $total += $i; } return($total); } print &sum(1,2), "\n"; 当然，Perl 有许多子程序，你不必自己去创建。有些是内置于 Perl 中的，而社区库则提供了其他的。用 Perl 编写脚本Perl 可以被编译，也可以作为一种解释型的脚本语言使用。后者是刚入门时最简单的选择，特别是如果你已经熟悉了 Python 或 shell 脚本。这里有一个用 Perl 编写的简单的掷骰子脚本。把它读一遍，看看你是否能跟上它。#!/usr/bin/env perl use warnings; use strict; use utf8; binmode STDOUT, ":encoding(UTF-8)"; binmode STDERR, ":encoding(UTF-8)"; my $sides = shift or die "\nYou must provide a number of sides for the dice.\n"; sub roller { my ($s) = @_; my $roll = int(rand($s)); print $roll+1, "\n"; } roller($sides); 第一行告诉你的 POSIX 终端要使用什么可执行文件来运行该脚本。接下来的五行是模板式的包含内容和设置。use warnings 的设置告诉 Perl 检查错误，并在终端对它发现的问题发出警告。use strict 设置告诉 Perl 在发现错误时不要运行脚本。这两个设置都可以帮助你在代码中的错误导致问题之前发现它们，所以通常最好在你的脚本中激活它们。脚本的主要部分开始于对脚本从终端启动时提供给它的 参数 进行分析。在这种情况下，预期的参数是一个虚拟骰子的所需的面的数量。Perl 将其视为一个堆栈，并使用 shift 函数将其分配给变量 $sides。当没有提供参数时，die 函数会被触发。用 sub 关键字创建的 roller 子程序（或函数），使用 Perl 的 rand 函数生成一个伪随机数，最大不超过参数的数字。这意味着在这个程序中，一个 6 面的骰子不可能掷出 6，但它可以掷出 0。这对计算机和程序员来说是没有问题的，但对大多数用户来说，这是令人困惑的，所以它可以被视为一个 bug。为了在这个 bug 成为问题之前解决它，下一行在随机数上加 1，并将结果作为掷骰子的结果打印出来。当引用传递给子程序的参数时，你引用的是特殊变量 @_，它是一个数组，包含了函数调用时括号内的所有内容。然而，当从数组中提取一个值时，数据被转换成一个标量（例子中的 $s 变量）。子程序在被调用之前不会运行，所以脚本的最后一行调用了自定义的 roller 函数，将命令的参数作为函数的参数。将该文件保存为 dice.pl，并标记为可执行：$ chmod +x dice.pl 最后，尝试运行它，为它提供一个最大的数字，从中选择其随机数：$ ./dice.pl 20 1 $ ./dice.lisp 20 7 $ ./dice.lisp 20 20 没问题！Perl 速查表Perl 是一种有趣而强大的语言。尽管自从 Perl 成为默认的脚本语言后，Python、Ruby 和 Go 等新兴语言引起了许多人的注意，但 Perl 的功能并不弱。事实上，它比以往任何时候都要好，而且前途光明。下次你想找一种更灵活的语言，并有简单的交付方式时，不妨试试 Perl，并下载这个速查表！via: https://opensource.com/article/22/2/perl-cheat-sheet作者：Seth Kenlon 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
硬核观察 | PowerShell 成为关键安全威胁的首要来源
PowerShell 成为关键安全威胁的首要来源根据今天在 RSA 大会上发布的思科研究报告，PowerShell 是 2020 年下半年在端点上检测到的关键威胁的首要来源，占比超过了 1/3。PowerShell 成为勒索软件、无文件恶意软件的主要载体。思科报告显示，端点威胁的首要类别是用于利用及利用后任务的双重用途工具。PowerShell Empire、Metasploit 和其他此类工具有合法用途，但它们也已成为攻击者工具包的一部分。强力的工具用于恶意用途也是强力的。所以，最起码系统管理员们先将 PowerShell 保护起来吧。Python 官方软件包库 PyPI 正被垃圾软件包淹没PyPI 充斥着以流行电影命名的垃圾软件包，其通常与提供盗版下载的盗版网站有关。这些软件包都是由一个独特的假名维护者账户发布的，这使得 PyPI 要一次性删除这些软件包和垃圾账户变得非常困难。除了包含垃圾关键词和视频流网站的链接外，这些软件包还包含从合法的 PyPI 软件包中提取的功能代码和作者信息，以掩盖他们的恶意行为。近几个月来，对 npm、RubyGems 和 PyPI 等开源生态系统的攻击不断升级。恶意威胁者用各种恶意和伪造的软件包灌满了软件仓库，以传播他们的信息。这成了一场打地鼠比赛。公开软件库或许需要改变其上传和审核机制，并引入防范垃圾邮件和防止论坛垃圾信息方面的经验。时隔一年后，Perl 5 发布新版本将近一年后，Perl 语言宣布发布 Perl 5.34.0。这个版本包含了来自 78 名贡献者的大约 28 万行代码变更。主要变化包括：实验性的 try/catch 语法，正则表达式量词允许空下界，新的八进制语法，性能增强和模块更新等等。不能说 Perl 语言社区不努力，28 万行代码，这放在任何一个开源项目里都不少。奈何 Perl 语言已经不时髦了，几乎没有人学了，也没有一个独占领域。
硬核观察 | 因北美暴风雪，Linus Torvalds 遭遇六天断电后发布了内核“冰封废土”
因北美暴风雪，Linus Torvalds 遭遇六天断电后发布了内核“冰封废土”上个月中旬，因为罕见的严寒天气和暴风雪，美国得州和俄勒冈州波特兰遭遇了持续多天的停电。Linux 创始人 Linus Torvalds 就生活在波特兰，多年来他一直在家中远程工作，并负责新内核的最终发布。之前我们报道过，内核社区发现“内核合并窗口意外‘冻住’了”。最近，Linus 在邮件列表中承认是由于停电导致了新的 Linux 内核的发布延误，在 5.12 合并窗口开启两周之后才发布了 5.12-rc1。为了纪念这一事件，Linus 将 5.12 版本命名为：Frozen Wasteland（冰封废土）。这个事情反映了两个问题：一个是 Linus Torvalds 的单点故障；另一个是网络和电力等基础设施对 Linux 出乎意料的影响。Coinbase 称中本聪现身或出售其持有比特币会导致市场不稳定数字货币交易平台 Coinbase 上周递交了 IPO 申请，准备以直接上市的方式在纳斯达克公开上市。在申请文件中，Coinbase 列出的风险因素包括了比特币的神秘创始人中本聪。中本聪在 2008 年发表了比特币论文，2011 年之后就不再露面。他在此期间挖掘了大约 110 万枚比特币，总价值超 300 亿美元。Coinbase 称如果中本聪的身份曝光，或转移其持有的比特币，都可能导致数字货币市场的不稳定，从而影响到 Coinbase。为了向这位比特币创造者致敬，Coinbase 将中本聪列为其公开文件的接收人之一。有人评价说，教众对教主的拥护都是口头的，但实际上并不欢迎教主回来。:smile:被劫持的 Perl.com 问题解决1 月 27 日，Perl 语言的官网之一 Perl.com 域名遭到劫持；直到 2 月 5 日问题才完全解决。Perl.com 域名是在 1990 年代初注册的，Tom Christiansen 被列为注册人，但是没有启用近年来引入的域名安全功能，如双因子认证。攻击者可能是首先通过社会工程入侵了域名服务商 Network Solutions，然后更新了域名的信息，并通过几次转移域名注册商来逃避追回。在转移到 Key Systems 之后攻击者尝试以 19 万美元拍卖 Perl.com 域名，但在媒体报道之后很快被终止。现在，Perl.com 域名已经回到了 Tom Christiansen 手中，他们加入了安全功能防止同样的事再次发生。还好解决了，但是之所以出现这样的问题，我觉得主要还是 Perl 社区“太旧”了。
硬核观察 | Excel 现在具备了图灵完备性，成为第一大编程语言
Excel 现在具备了图灵完备性，成为第一大编程语言如果一种编程语言可以实现任何可能的算法，那么它就具备了图灵完备性。微软通过引入 LAMBDA，Excel 现在具备了图灵完备性，Excel 转变成一种全面的编程语言。自 20 世纪 80 年代发布以来，Excel 为每天使用它的数百万人提供了决策依据。它也是世界上使用最广泛的编程语言。Excel 公式的编写者比世界上所有 C、C++、C#、Java 和 Python 程序员的总和还要多一个数量级。但是我们通常不将 Excel 视作一种全面的编程语言，因为它有两大缺点：其一是公式语言只支持数字、字符串和布尔值等标量值，其二是不支持定义新函数。而在 2019 年，Excel 的数据类型超越了文本和数字，允许单元格包含一级记录。接着，在去年 12 月微软宣布了 LAMBDA 功能，解决了第二个缺陷。LAMBDA 允许用户使用 Excel 的公式语言定义新的函数。通过 LAMBDA，理论上可以用 Excel 的公式语言写任何计算，从而满足了图灵完备。LAMBDA 目前提供给了 Beta 测试用户。我觉得，这一下，将“程序员”群体扩大了好几倍！Perl.com 官网被劫持日暮西山的 Perl 语言已经不再流行，虽然也在努力自救，但是整个生态的衰败依旧难以遏制，现在已经很少有新人学习 Perl 语言了。但是 Perl 依然是重要的基础设施，很多软件仍然是用 Perl 写的，Perl 的 CPAN 仓库依然是一个宝库。上周末，The Perl NOC 报道称，Perl.com 被劫持，被指向了一个停车网站。更严重的是，它被用于分发恶意软件。目前该网站页面访问无显示，但是加载了作用不明的 JavaScript 脚本。Perl.com 曾被用作通过 CPAN 分发模块的镜像或备份。如果你的 CPAN 配置使用了它，请尽快修改。当前管理员已经在尝试恢复该域名的控制权，但是目前尚无明确进展。该域名是如何被劫持的细节也不得而知。作为一名老 Perl 程序员，听到此事，实在是感到痛心，这是多么垂暮的社区，才能对基础设施的安全疏忽至此！据称 IBM 已经将其区块链团队削减殆尽据四位熟悉情况的人称，IBM 已经将其区块链团队削减殆尽。据一位消息人士称，“其实不会再有区块链团队了。IBM 的大部分区块链人员都已经离开了。”，而另外一位称，“IBM 的区块链部门连续两年大幅度错过了收入目标”。但 IBM 的一位发言人否认了这些说法，“我们的区块链业务做得很好”。IBM 称，“我们调整了一些领导人和业务部门，以继续推动增长 —— 我们每年都会这样做。”其实，作为目前热点的区块链，在我看来，有些联盟链项目本身就是伪概念。如果上述情况属实，不知道国内的相关区块链行业会不会也有类似变化。
代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。什么是《代码英雄》 代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽（Red Hat）精心制作的原创音频播客，讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。本文是《代码英雄》系列播客《代码英雄》第三季（4）：深入 Perl 语言的世界的音频脚本。导语：语言来了又走。只有少数几种语言具备了登峰造极的能力，而能留在那里的则更少。Perl 有过一次惊人的崛起，也有过一次平静的低迷，现在已经在编程世界中找到了自己的位置。Perl似乎注定要统治网络。Michael Stevenson 和 Mike Bursell 描述了 Perl 的设计如何使它成为早期 web 的理想选择。我们从 Conor Myhrvold 那里听到了它的座右铭：“ 实现它的方法不止一种 There is more than one way to do it. ”。Elizabeth Mattijsen 分享了，尽管 Perl 有优势，但漫长的开发周期如何减缓了 Perl 的发展。虽然它不再是最顶级的网络语言，但 John Siracusa 指出，Perl 作为一种小众工具仍然存在。00:00:02 - Saron Yitbarek：想象一下 Perl 语言的创建者 Larry Wall 在 1999 年的一次会议上站在麦克风前，留着他标志性的浓密胡子和梳理过的刘海，感觉相当好，因为他所发明的语言正在越来越受欢迎。00:00:19 - 配音演员：声音测试。00:00:19 - Saron Yitbarek：Perl 语言轻而易举地超越了 COBOL、Visual Basic，而 Python 呢? Python 仍然是一个不入流的竞争者，是Larry Wall 的几个玩笑素材。Wall 展示了 dice.com 报告中的人群数据，在那时来看，Perl 语言的未来是非常、非常光明的。然而之后 Perl 的未来就不再如此了。20 年之后，dice.com 在 2018 年夏天将 Perl 列为最可能灭绝的语言之一。短短 20 年之间发生了什么？**00:00:59 **：我是 Saron Yitbarek，这里是《代码英雄》，一档红帽公司的原创播客。这一季是关于我们编程语言的力量和前景的。在上一集我们追踪了搭上了互联网顺风车的 JavaScript 的疯狂崛起。00:01:19：并不是每一种语言都有一个不停地成长和成功的故事。大多数语言的出现，在当时非常特殊的生态系统中发挥了它们的作用，然后当我们的编程生活里需要其他类型的工具时它们就开始消退。00:01:37：本集我们将深入了解 Perl 世界。是什么造就了它早期的成功，为什么它的成功突然就被颠覆了？我们所处的环境，我们的基础设施，我们的硬件，各种因素都会决定哪些语言会繁荣，哪些会开始萎缩。这就是 Perl 语言的故事的魅力所在。00:02:08：我们知道 Perl 并没有统治世界，但是退回到上世纪 90 年代的时候，却看不到这一点。Tim Berners-Lee 在 1991 年发明了 万维网 World Wide Web （WWW），它迅速创造了一个全新的基于 Web 的开发领域。谁也说不准会是哪种编程语言在这个新领域取得成功。00:02:31 - Michael Stevenson：在 Web 出现的时候，所有人都等待着会有什么事情发生。那个时候整个世界都是令人兴奋的。00:02:39 - Saron Yitbarek：Michael Stevenson 是 阿姆斯特丹大学 University of Amsterdam 媒体研究的副教授。他为我们描述了早期的 Web。人们见过 Usenet，也见过 ARPANET。他们看到了 美国在线 America Online ，还有一些其它的东西。但是直到 Web 出现，互联网的全部发展潜力才真正得到体现。突然之间，你就可以通过鼠标和点击进入了这个巨大的互联世界。这是一个出乎意料的事情。00:03:09 - Michael Stevenson：你要是记得 1993 年，也就是 Web 开始崭露头角的那一年，也是《 连线杂志 Wired Magazine 》开始出版的那年。在那之前类似《Mondo 2000》这类的杂志真的让电脑看起来像神秘知识的来源，让电脑看起来很酷。00:03:32：因此从这个意义上说，Web 也到达了一个相当特定的时期，人们已经准备好以这样的方式迎接技术的兴起。00:03:43 - Saron Yitbarek：故事在这个时候开始了：Larry Wall 在 1987 年创建了 Perl，4 年后万维网才开始兴起。Larry Wall 给世界带来的 Perl 最初只是一种通用的 Unix 脚本语言。当然，它确实很有用，但同时 Perl 还有一些秘密元素，这些元素使它成为即将到来的 Web 开发世界的理想语言。00:04:14 - Michael Stevenson：比较有名的是 Perl 是 Larry Wall 在参与的一个美国国家安全局（NSA）的秘密项目中发明的，基本上他所做的就是创建一个类似黑客版的新闻栏目，运行在 Usenet 上，因此 Perl 语言从一开始就是操作文本和将数据从一个地方移动到另一个地方，这完全符合 Web 的需求。而 Perl 作为一种易于使用的脚本语言，更加接近于自然语言。它可以用来快速开发东西，所有这些都让 Perl 成为了一个完美的契机，不仅适合专业用户，也适合新加入的业余爱好者。00:05:09 - Saron Yitbarek：很偶然的是，当 Web 出现时，Perl 已经为 Web 做好了准备。Larry Wall 不可能知道 Web 即将出现。但当它出现时正好相互吻合。但我认为还有一点很关键：Perl 是一种自由语言。Larry Wall 在 自由软件基金会 Free Software Foundation 开发的 GPL（ 通用公共许可证 General Public License ）下发布了它。00:05:37：Larry Wall 让他的语言自由开源的决定，这完全符合刚刚开始出现的基于 Web 的新思维方式，同时 Perl 在其他方面也很有前瞻性。00:05:50 - Michael Stevenson：Perl 的开放性令人难以置信，在某种意义上，它总是愿意整合一些其他的东西，新的东西。这和 Larry Wall 的身份很相配。他是个很开放谦虚的人，总是仔细考虑别人的想法，并试着设身处地为别人着想。对我来说 Perl 作为一种语言，以及作为一个社区的性格，在很长一段时间里，真的很符合这一点。00:06:27 - Saron Yitbarek：同样 Perl 非常适合 Web 早期的、狂野的西部阶段，也就是黑客时代。实际上 Perl 的座右铭之一就是“ 实现它的方法不止一种 There is more than one way to do it. ”。00:06:39 - Michael Stevenson：在 Perl 的鼎盛时期和这个试验性的开放 Web 的鼎盛时期之间，存在着一种近乎浪漫的联系，在它变得如此被几个平台所控制之前。00:06:56 - Saron Yitbarek：记得上世纪 90 年代是互联网历史上的一段启蒙时期，那时人们还在争先恐后地想知道还有哪些是可能的。那时对编程的需求是巨大的，每个人都需要有一个网页，这意味着一群全新的开发人员，他们都对新的做事方法持开放态度。问题变成了“好吧，我们有了一个全新的领域，但用什么语言来完成这项工作呢？”00:07:26：Perl 虽然并不是这个问题的最终答案，但对于很多人来说 Perl 是他们首选的答案。00:07:34 - Michael Stevenson：我并不是说我更愿意看到加载速度超慢的网页、也没有谷歌搜索引擎的时代，但我确实认为那个时代有一些特别的东西，当时有一些人，在他们的宿舍里，创建了一个类似 slashdot 的东西。而现在随着 Web 已经变得如此主流、专业化和被集中在几个大公司中，我们确实怀念那个时代。对我来说，Perl 比其他任何早期的故事都更能象征这一点。00:08:15 - Saron Yitbarek：Michael Stevenson 是阿姆斯特丹大学媒体研究的副教授。00:08:24 - Saron Yitbarek：之后，随着 90 年代的到来，Perl 作为一种能适应早期互联网发展潜力的语言出现了，它是一个时代的语言。Larry Wall 和他所创造的 Perl 正好明白了 Web 的本质。00:08:40 - Mike Bursell：在网上你可以随意搜索，也可以随时创建网页，这是互联网的美丽新世界，你可以随时做这些事情。00:08:52 - Saron Yitbarek：这位是 Mike Bursell，红帽公司的首席安全架构师。Mike 是 90 年代中期发现和使用 Perl 的黑客之一。00:09:00 - Mike Bursell：对于 Web 来说，Perl 是许多人的起点。Java™ 语言还处于早期阶段，它在文本输入输出方面并不是很出色。如果你想进行查询和生成页面，Perl 是人们都在使用的工具。00:09:22：Perl 非常适合，因为它擅长获取文本，并使用文本做其他事情，而这正是 Web 所需要的。00:09:31 - Saron Yitbarek：顺便需要说一下的是，Larry Wall 有语言学背景，这就解释了为什么 Perl 有强大的文本解析能力。正如 Mike Bursell 提到的，这是一笔巨大的好处，因为在早期，Web 主要是一种基于文本的媒介，因为那时候人们没有足够的带宽来处理图像。00:09:51 - Mike Bursell：它很容易使用，也很容易复制。人们在分享方面非常开放，而且它的输出速度很快，这些都是好东西。00:10:02：哦，当然还有一点，就是你可以用管道使用它。所以，这是非常多的人所习惯的，而且非常容易测试，甚至离线测试，这都是非常有用的。00:10:13 - Saron Yitbarek：尤其对那些在 Web 的世界中重新规划自己生活的系统管理员来说非常有用。00:10:21 - Mike Bursell：Perl 是给系统管理员们的真正礼物。即使在那个年代，如果你做一些事情，你会得到很多日志。管理这些日志，分解它们，搜索它们，并能够以不同的方式显示它们，或获取任何其他大型文本语料库（主要就是日志），甚至可以对它们进行调试。除非你要在命令行里用管道方式传输 orc、sed 之类的东西，以及 ed 命令，那样的话你很快就会变得非常痛苦，而 Perl 正好适合让你去处理这些事情。00:10:55 - Saron Yitbarek：到上世纪 90 年代后期，Perl 5 已经聚集了一个强大的用户群体。像 Fortran 和 C 这样的旧语言依赖于庞大而昂贵的硬件，而 Perl 更有生命力，也更容易移植。在那样一个硬件成本急剧下降的世界里，Perl 的设计使得它得到了蓬勃发展，Perl 让所有的新程序员快速、轻松地工作。这是因为 Larry Wall 以牺牲 CPU 和内存的需求为代价，使 Perl 语法更人性化。所有这些元素组合在一起，使 Perl 成为一种很受新开发社区欢迎的语言。00:11:36 - Mike Bursell：在一个正在壮大的社区里，你可以去和他们聊聊社区里的事情，然后 PerlMonks 论坛出现了，那里是一个讨论的好地方，能在论坛里知道正在发生的事情。00:11:50 - Saron Yitbarek：这个社区确实拥有 Web 所能提供的最好的东西。他们发现了一个巨大的软件模块库，一个叫做 CPAN 的存储库，这些系统管理员都很喜欢它。它给 Perl 提供了更多的灵活性，许多人都可以部署由少数几个编程大师编写的代码。00:12:15 - Mike Bursell：它有很多库可以做你想做的任何事情，如果你找不到你想要的库，你可以去问一下，然后就会有好心人写出你想要的库。00:12:21 - Saron Yitbarek：Mike Bursell 是红帽公司的首席安全架构师。00:12:28 - Saron Yitbarek：正是由于 Perl 是免费的，它受到不断增长的模块库的支持，它是可移植的，而且它有一个蓬勃发展的社区。一切看起来都很好。Perl 可以在上世纪 90 年代 Web 开发新天地中发挥所有优势，但就在 90 年代即将结束的时候，互联网的发展前景又一次发生了变化，时代来了一个大的转变。00:12:57 - Alan Greenspan：但我们又能如何知道非理性繁荣何时已过度推高了资产价值，进而导致了意料之外的长期经济收缩?00:13:12 - Saron Yitbarek：“非理性繁荣”是时任美联储主席 Alan Greenspan 在 1996 年对 美国企业协会 American Enterprise Institute 所说的话。他那句“非理性繁荣”是对 90 年代人人都经历过的网络泡沫的警告。所有早期使用 Perl 的 Web 开发人员都在那个泡沫中乘风破浪，但正如 Greenspan 预测的那样，泡沫在 2000 年破裂了。00:14:11 - Conor Myhrvold:大家好，我是 Conor Myhrvold 。在过去的五六年里我一直从事编程，现在在技术领域为 Uber 工作。00:14:20 - Saron Yitbarek：2000 年代初，当 Conor 还在高中的时候，Perl 仍然是一个非常重要的东西。但他越来越意识到一种与之竞争的语言，叫做 Python。00:14:31 - Conor Myhrvold：Python 所追求的是一种更结构化的语言，做很多不同的事情都有一种更显然的方式，它就是那样设计的。而 Perl 则喜欢做某件事有不止一种方法，但这让很多初学者感到困惑。00:14:49 - Saron Yitbarek：Perl 有这样一句座右铭“ 实现它的方法不止一种 There is more than one way to do it. ”。而 Python 的理念实际上是相反的，Python 为每个问题都提供了一个明显的解决方案，这意味着查看别人的 Python 代码很容易；而另一方面查看其他人的 Perl 代码可能会令人困惑。Perl 作为一个程序员的第三或第四种语言是有意义的，而正是因为它是一种脚本语言，而脚本是互联网连结的基础。00:15:23：但是 Python 是一种你可以真正深入研究的语言，即使你是一个新手。Perl 有一套特定的优势，比如在搜索文本和生物信息学上。但是 Python 就是这样一种简单通用的语言。Python 获得了越来越多的信任，成为人们首先想学的语言，这是一件大事。00:15:47 - Conor Myhrvold：越来越多的人开始上网，越来越多的人开始学习如何编程。尤其是相对于 Perl 而言，Python 受益于它本身相对容易学习，因为它更结构化。而这样结果是，在一个快速增长的世界里，如果你能得到更多增长的份额，那将最终意味着有更多的教程和更多的东西可供你使用。00:16:10 - Saron Yitbarek：在之前提到过的 CPAN，它是 Perl 用户可以使用的强大的中央存储库。这在 90 年代是一大亮点，但 CPAN 的价值也在变化。00:16:24 - Conor Myhrvold：这也不能真正帮助你学习一门语言，因为你是在“复制粘贴”，只是用最少的方式替换你需要的东西。从长远来看这是一个劣势，因为如果你让人们通过自己进行原始开发来学习如何使用一种编程语言，即使这需要花费更长的时间，他们也会觉得自己对它投入了更多，而且他们也了解在这中间发生了什么。00:16:48 - Saron Yitbarek：Python 没有像 CPAN 那样的集中式存储库，但是对于那些在新千年时代来到这里的开发人员来说，在一个互联网搜索功能如此强大的世界里，存储库并没有那么大的价值。00:17:05 - Saron Yitbarek：最终 Python 有了大量的教程，当然现在也有了像 GitHub 这样的平台。00:17:13 - Conor Myhrvold：最终发生的事情是 Perl 拥有的许多优势，是来自一个已经过时的时代的网络效应。00:17:24 - Saron Yitbarek：Conor Myhrvold 是 Uber 的一名工程师。00:17:30 - Saron Yitbarek：然而语言的兴衰很少是由外部力量单独决定的，而 Perl 的内部问题是，在它的发展过程中它似乎遇到了障碍。Python 正在以一种相当有序的方式发布新的迭代，而正如我们在本季度第一集中所了解到的，Perl 在 2000 年互联网泡沫破裂之时，Python 开始获得更多新开发人员的青睐。00:17:59 - Saron Yitbarek：每个人都期待着 Perl 6 的发布，人们都很兴奋。他们等啊，等啊，等啊……他们等了 14 年。00:18:15 - Elizabeth Mattijsen：人们提出了大约 300 多件 Perl 6 应该能够完成的事情，当然其中很多事情基本上都是相互排斥的。00:18:26 - Saron Yitbarek：这是 Elizabeth Mattijsen，她是 Perl 6 的核心开发人员。2000 年，Elizabeth 参加了在 蒙特雷 Monterey 举办的 Perl 会议。那时开发者认为他们已经停滞不前了，所以 Perl 6 是必要的。Larry Wall 同意了，但是如果说 Perl 5 是他对 Perl 的重写，那么他希望 Perl 6 是由社区来对 Perl 进行重写。由于团队合作可能需要更长时间，甚至用了 14 年，对于那些开发者来说，这是一条漫长而艰难的道路。00:19:01 - Elizabeth Mattijsen：我们可以说当前实施的 Perl 6 项目实际上是实现它的第三次尝试。00:19:07 - Saron Yitbarek：按照 Elizabeth 的说法，在这 14 年里有过多次尝试。中间经历了漫长而痛苦的深度的尝试。开发者们心力交瘁；人们陷入了死胡同。到 2015 年圣诞节那天 Perl 6 终于问世时，世界上的许多地方已经开始了新的发展。而需要注意的是 Perl 6 并没有给予成为某种革命性的新事物，从而实现对 Python 的反击。Perl 6 是对原版进行了深思熟虑的重新设计。00:19:43 - Elizabeth Mattijsen：我认为 Larry Wall 在他的“ 洋葱状态 State of the Onion ”演讲中使用了一个很好的比喻。对他来说，Perl 5 就像《 霍比特人 The Hobbit 》，而 Perl 6 就像《 指环王 Lord of the Rings 》。如果你仔细看过《霍比特人》和《指环王》的故事，你会发现它们基本上是同一个故事。只是《霍比特人》比《指环王》小得多，情节漏洞也更多，没有《指环王》那么宏大的背景。我认为这很好地描述了 Perl 5 和 Perl 6 之间的区别。它基本上是同样的想法，同样的思路，同样的环境，只是对它的重新构想。00:20:26 - Saron Yitbarek：Elizabeth Mattijsen 是 Perl 6 的核心贡献者。00:20:32：如今，Perl 甚至可能不在前 20 种语言之列。在外部竞争和内部拖延之间，它还没有向大多数新开发人员证明自己。但这提出了一个大问题，我们真的应该根据一种语言的流行度来判断我们的编程语言吗？或者说我们应该根据其他方面来判断一种编程语言的价值？当昔日的超级巨星成为陪衬时，这到底意味着什么呢？00:21:06：在世纪之交时互联网泡沫破裂时，Perl 的统治地位开始衰退时，Larry Wall 发表了一个有趣的声明。他认为尽管 Perl 永远不会再成为世界上最流行的编程语言，但它可以成为较小类别中的领先者。Larry Wall 说那才是真正的目标。成为同类中最好的，而不是世界上最好的。正如他所说的，SUV 永远不会和赛车竞争。00:21:38 - Saron Yitbarek：我想深入研究这个想法，我想了解在细分类别中做到最好对编程语言的真正含义。00:21:48 - John Siracusa：我是 John Siracusa，我是一个程序员，也是一个播客主。00:21:53 - Saron Yitbarek：John 实际上共同主持了三个播客：《Accidental Tech Podcast》、《Reconcilable Differences》和《Robot or Not?》。我们刚刚聊到了 Perl 在当今世界的地位。00:22:06：Perl 在当今世界排名如何？它仍然是最好的计算机语言吗？00:22:10 - John Siracusa：Perl 6 具有其他语言没有的、其他语言应该具有的东西，我一直在等待其他语言偷学它。例如语法是将常见任务概念化的一种好方法，而在我看来，使用语法来解决解析问题比使用现有的工具更令人愉快、更干净、更好。00:22:31：在 Perl 中，对象系统的许多部分看起来很琐碎而无关紧要，但我完全期待其他语言最终会采用它，就像许多语言最终采纳了 Perl 5 中的许多思想一样。因此我认为 Perl 6 在许多方面都是最好的。遗憾的是，很少有人有机会使用它。00:22:52 - Saron Yitbarek：你认为 Perl 6 社区的发展需要做些什么？想让人们更多地参与到 Perl 6 中，需要做些什么？00:23:00 - John Siracusa：这有点像 Perl 6 的故事，就像它一直在寻找一个真正奇妙的实现一样。这是第二系统问题的一部分…… 第二系统综合症 second-system syndrome ，我想他们是这样称呼……00:23:11 - Saron Yitbarek：哦。00:23:12 - John Siracusa：Perl 6 的，人们希望修复世界上的所有问题。他们想要解决的问题之一是运行时环境。是什么在运行我们的代码？运行 Perl 5 和之前的 Perl 4 的东西是一个巨大的 C 程序，这是由具有独特编码风格的开发者编写的。还有大量的宏，它是一种相当难以理解的东西。00:23:33：Perl 6 的想法是让我们不要再那样做了，让我们不要制造大量的 C 代码。相反，让我们使用一个虚拟机，这在当时是一种时尚，有很多关于如何实现它的伟大想法。最终我们得到了几个中规中矩的虚拟机实现版本，有时这些还会相互竞争，但没有一个达到真正交付语言使用时需要的性能、稳定性和特性。00:24:01 - Saron Yitbarek：现如今 Perl 到底发生了什么？你对此有什么看法？00:24:06 - John Siracusa：Perl 5 绝对像是在走下坡路，因为与 Perl 5 同时代的所有其他语言都采纳了它的大部分最佳思想，并获得了更多的支持。也就是说，因为它在很长一段时间内都是王者，所以有很多 Perl 5 代码在运行一些大型的、重要的站点，人们需要维护和扩展这些代码。00:24:29：这需要很长时间才能消失。只要看看现今仍然存在的 COBOL，人们怎么还在雇佣人在 COBOL 上做维护吧？00:24:35 - Saron Yitbarek：嗯。是这样。00:24:36 - John Siracusa：你刚才问 Perl 是不是一门垂死的语言，我提到了 COBOL，这听起来并不乐观。Perl 6 本身会成为主流语言吗？看起来可能性不大。现在对其他语言有非常多的关注，如果 Perl 6 现在还没有得到开发者的关注，我不知道将会需要发生什么变化来让它流行起来。00:24:54 - Saron Yitbarek：如果你是这样想的，你对 Perl 有什么期望？你希望在 Perl 5 或 Perl 6 中看到什么，以及希望看到将来发生什么？00:25:04 - John Siracusa：我对 Perl 5 的希望是人们不要忽视它，因为尽管有其它更流行的语言，但今天许多公司仍然采用 Perl 5 做为解决问题的最佳方案。通常这些都是胶水类型语言的问题。如果你发现自己曾经编写过 shell 脚本，并且可能会说:“好吧，我不会用我的‘真正的编程语言’来做这件事。”不管是 Python，还是 Ruby，还是别的什么。但是 shell 脚本可以让我把一堆东西连接起来（胶水类型语言）。Perl 是完成这项工作的更好工具。编写正确的 Perl 脚本要比编写正确的 shell 脚本更容易。00:25:40 - Saron Yitbarek：我认为归根结底 Perl 可能不再是一个适合入门的语言，但对于经验更丰富的多语言开发人员来说，它是那个你永远不希望扔掉的工具箱中的小工具，而且特定的工具有时让你提升水平的工具。00:25:58 - John Siracusa：有时我为 Perl 6 感到难过和沮丧，认为它不会有任何进展，有时我想“好吧，这是个不错的小社区”。每个社区都不需要称霸世界，也不需要成为整个行业的主导语言。也许可以就这样一直走下去，就是，无限期地走下去。这就是开源，和编程语言的伟大之处。没人可以阻止你，你可以像以前一样继续开发 Perl 6。00:26:27 - Saron Yitbarek：John Siracusa 是一名程序员，也是三个科技播客的联合主持人。00:26:34：语言都是有生命周期的。当新的语言出现时它们能够精确地适应新的现实，像 Perl 这样的选择可能会占据更小的、更小众的领域，但这并不是一件坏事。我们的语言应该随着我们需求的变化而扩大或缩小它们的群体。在互联网开发的早期历史中，Perl 是一个至关重要的角色，它以各种方式与我们联系在一起，只要看一看它的历史就会发现它的存在。00:27:11：下次在《代码英雄》中，我们将讨论：是什么将一种语言变成了标准？以及在基于云的开发世界中，新的标准将如何出现？00:27:26：《代码英雄》是红帽的原创播客。如果你想深入了解 Perl 的故事，或者任何我们在第三季中探索的编程语言，请访问 redhat.com/commandlineheroes 。我们的网站里有许多精彩内容等你去探索。00:27:49：我是 Saron Yitbarek。下期之前，编码不止。什么是 LCTT SIG 和 LCTT LCRH SIGLCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ，LCTT SIG 是针对特定领域、特定内容的翻译小组，翻译组成员将遵循 LCTT 流程和规范，参与翻译，并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽（Red Hat）发起的 SIG，当前专注任务是《代码英雄》系列播客的脚本汉化，已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。欢迎加入 LCRH SIG 一同参与贡献，并领取红帽（Red Hat）和我们联合颁发的专属贡献者证书。via: https://www.redhat.com/en/command-line-heroes/season-3/diving-for-perl作者：Red Hat 选题：bestony 译者：Mikedkmilk 校对：Northurland, wxy本文由 LCRH 原创编译，Linux中国 荣誉推出
Perl 继续前行，Perl 7 将是下一代（硬核老王点评版）
近日召开的 Perl 大会是在云端举办的，在会上 Sawyer X 宣布 Perl 有了新的前进计划。Perl 7 的开发工作已经在进行中，但不会有代码或语法上的巨大变化。它是默认带有现代行为的 Perl 5，将为以后更大的变化奠定基础。硬核老王：在经历了 Perl 6 失败的巨大痛苦之后，Perl 社区终于从阴霾的心情中走出了。但是失去的黄金 20 年却是挽回不了了，否则别说 PHP，都不会有 Python 什么事。我认为，Perl 7 是一条自我救赎之路，应该，或许，会有新的 Perl 7、Perl 8 吧……Perl 7 基本上是 Perl 5.32Perl 7.0 将会是 Perl 5 系列的 5.32，但会有不同的、更合理的、更现代的默认行为。你不需要启用大多数你已经设置过的默认行为，因为这些已经为你启用了。这个大版本跳跃为我们一直以来的工作方式和未来可以做的事情之间设定了一个界限。硬核老王：可以理解为，Perl 是一个 Perl 5 兄弟们亲手打下的家族企业，而 Perl 6 是外面请来的职业经理人，结果经理人要对家族企业采用现代化管理，差点鸡飞蛋打。现在好了，Perl 6 分家出去单过了，亲儿子 Perl 7 准备重振家业。请记住，Perl 是一门“按我的意思做”的语言，其默认行为可能就是你想要的。在 Perl 4 和 Perl 5 的早期，这很容易。但是，几十年过去了，现在的世界更加复杂了。我们不断地往其中添加编译指令，但由于 Perl 对向后兼容的承诺，我们不能改变其默认行为。现在，我们又回到了 C 语言的旧时代，在开始做一些事情之前，我们必须包含大量的例行模板：use utf8; use strict; use warnings; use open qw(:std :utf8); no feature qw(indirect); use feature qw(signatures); no warnings qw(experimental::signatures);这一点在 v5.12 及以后的版本中稍有好转，因为我们可以通过使用设置最低版本来免去设置 strict 指令：use v5.32; use utf8; use warnings; use open qw(:std :utf8); no feature qw(indirect); use feature qw(signatures); no warnings qw(experimental::signatures);硬核老王：不可否认，Perl 二十年前如日中天，那个时候，不说终端运行的脚本，就是互联网上主要的互动程序（CGI），也几乎全是用 Perl 写的。但是在风口时代它的主要精力都在折腾 Perl 6，而 Perl 5 系列不但很多地方显得老旧，历史包袱也过重。向前不能保持原有的精巧习惯，向后不能跟上现代的软工理念。Perl 7 是一个新的机会，即使不指定版本，也可以把其中的一些行为变成默认行为。Perl 5 仍然有它的极度向后兼容的行为，但 Perl 7 将以最小的历史包袱获得现代实践的新生。我个人希望 签名 （ signatures ） 功能能够入选到新的版本，但要让 Unicode 成为默认行为还有很多工作要做，所以你可能需要保留其中的一些编译指令：use utf8; use open qw(:std :utf8);你可能会丢掉一些你肯定不应该使用的垃圾功能，比如间接对象表示方式。Larry Wall 说他必须为 C++ 程序员做点什么。my $cgi = new CGI; # 间接对象，但在 Perl 7 不这样用了 my $cgi = CGI->new; # 直接对象但是，这个功能在 Perl 7 中并没有真正消失。它在 v5.32 中已经可以通过设置关闭了，但现在有了不同的默认行为。Perl 5 怎么了？没有人要把 Perl 5 从你身边夺走，它将进入长期维护模式 —— 比最新用户版本的两年滚动支持时间的两倍都要长得多。这可能要从现在支持到十年后了（或者说 Perl 5 已经人过中年了）。硬核老王：这样挺好，旧时代的继续留在旧时代，新生代的轻装前行。什么时候开始？这项工作现在就在进行，但你不需要担心，大约六个月后，才会出现第一个候选版本。我们的目标是在明年发布 Perl 7.0 的用户版本，并在这期间发布一些候选版本。这也是一个容易实现的承诺，因为 Perl 7 基本上就是 v5.32，默认行为不同而已。没有大的重写，也没新的功能，尽管目前一些实验性的功能可能会稳定下来（请把“签名”功能选入！）。CPAN 怎么办？CPAN（ 综合 Perl 档案网 （ Comprehensive Perl Archive Network ） ）有近 20 万个模块。人们正在使用的处于维护状态的模块应该还能用，对于其它的模块会有一个兼容模式。记住 Perl 7 主要是 v5.32，所以你应该不需要修改太多。你可能不知道 Perl5 Porters 几乎会针对所有的 CPAN 模块测试其新版本。这个用于检查更改可能对 Perl 社区产生影响的工具已有很长的历史了。作为一个模块的作者，我经常会收到来自不同人的消息，主要是 Andreas Koenig 或 Slaven Rezić，他们说我的模块中的一些奇怪的东西可能会在新的 Perl 版本中出问题。通常，我总是需要更新一些东西来解决这些问题。追踪现有代码中的问题已经不是问题了。修复代码应该不会那么繁琐，因为它仍然是 Perl 5，但有更好的实践。硬核老王：知道当年 Perl 为什么强悍吗？有一个主要的原因是，Perl 有个无所不包的 CPAN 仓库。会不会有一个单独的 Perl 7 的 CPAN？没有人说不能有，但是在跳转到 Perl 7 的过程中，开发人员不希望重做已经可以工作的东西。这个变化应该是可以控制的，尽量减少副作用。另外，PAUSE（ Perl 作者上载服务器 （ Perl Authors Upload Server ） ）在过去的几年里得到了不少人的喜爱。这使他们可以更容易适应未来的需要。从事这方面工作的人都是经验丰富、才华横溢的人，他们让代码库变得更加容易管理。为什么要跳到大版本？一个主要版本可以与用户订立不同的契约。跳转到一个主要版本可以用新的默认行为来改变这个契约，即使这与过去有冲突。如果你愿意的话，总会有办法将所有这些设置都重置为旧的 Perl 5 默认行为。不过在语法和行为上，Perl 7 的代码（大部分）仍然是 v5.32 的代码。Sawyer 谈到了 Perl 用户的三个主要细分市场：绝不会改变他们的代码的人使用新功能的人从零开始的人Perl 5 的社会契约是 极度后向兼容 （ extreme backward compatibility ） ，并且在这方面取得了惊人的成功。问题是，极度后向兼容对那些不会更新代码的人有效，但对另外两部分人没有帮助。要使用新功能的人不得不在每个程序中加入挺长的例行模板部分，而从零开始的人们则想知道为什么他们创建一个程序就必须包含这么多，才能不让 StackOverflow 上的人因为少了那些编译指令而呵斥他们。硬核老王：迎合新血才是最重要的，让旧代码和旧人们自己过吧。为什么是 7，而不是 6？这个答案分为两部分。 首先，“Perl 6” 已经被现在称为 Raku 的产品所采用。很久以前，我们认为这件非常雄心勃勃的重写工作将取代 v5.8。但最后，这件事并没有发生，Perl 语言依旧继续过着自己的生活。因此，下一个可用数字为 7。如此而已。这只是序列中的下一个基数。版本跳跃这事情并不稀奇：PHP 直接从 5 升到了 7 —— 难道是我们从 PHP 社区偷学到的跳跃技能？看看一下历史上的其他奇怪的版本变化：从 Solaris 2.6 到 Solaris 7从 Java 1.4 至 Java 5从以 Postgres 9.x 为主要版本变成了以 Postgres 10 为主要版本Windows 3.1 至 Windows 95（98、ME、2000、XP、Vista、7、8、10）TeX（每个新版本都更趋近于圆周率 π ）至少我们没跳到 Perl 34！硬核老王：言外之意，你们跳得，我也跳得~而且，你们不觉得版本 6 这个数字有点不吉利么，而版本 7 这个数字就好多了。有什么消失了么？消失的东西不多。有些东西在默认情况下会被禁用，但同样，这本质上是调整旋钮和拨盘指向不同地方的 Perl 5.32。即使在 Perl 5 的土地上，有些东西你也应该学会不需要。以下这些都是第一轮变化的可能目标：间接对象符号裸词文件柄（标准文件柄除外）伪多维数组和哈希值（老的 Perl 4 花招）Perl 4 风格的原型定义（使用 :prototype() 代替）硬核老王：是该学会放弃了，又不是区块链，什么旧的都不能丢下。增加了什么？增加的也不多。Perl 7 主要是 Perl v5.32，但默认启用了所有的功能。你不需要做任何事情就可以获得大多数新功能，比如postfix 解引用，新的 isa 操作符，或者其他一些功能。这就是一个主要版本可以提供的新社会契约的好处。这是一个硬边界，新功能可以在一边默认存在，而不干扰另一边。硬核老王：多增加点新的编程语言技能吧！哪怕是语法糖。那我现在应该做什么？如果你需要一个旧版的 Perl 来运行你的代码，你继续好了。那些旧版本是不会消失的。就像 Perl 5.6 到现在仍然可以使用，如果那是你希望运行的版本的话。如果你的代码在那些约束和警告下运行没有问题，而且你使用的是现代 Perl 风格，可能你大部分代码都不用动。如果你有一些裸词的文件柄，就开始转换这些，间接对象符号也一样。如果你的代码比较凌乱，你也不是没有机会。在从 Perl 5 到 7 的过渡过程中，会有兼容模式来帮助你（但不是 Perl 5 到 8）。一个编译指令可以把那些旋钮和拨盘设置回旧的设置（但这最多也就是一个版本的事情）。use compat::perl5; # 行为类似 Perl 5 的默认行为 对于模块来说，还有一些问题需要解决，但也会有一个兼容机制来解决这些问题。硬核老王：代码实在写的烂（辩解：我这不是烂，是 Perl 的古怪传统），那没办法，只能给你一次机会。好消息是，这些东西已经被主要的 Perl 利益相关者在生产环境中进行了测试。这不是纸上谈兵：我们已经在做了，一些粗陋的地方正在调整打磨。而且，v5.32 中已经有了一些这些旋钮和拨盘，比如，你可以这样关闭间接对象表示：no feature qw(indirect);预期会有更多的旋钮或拨盘，或许像这样：no multidimensional; no bareword::filehandle;我在《为 Perl 7 做准备》一书中收集了所有这些信息，这是我通过 Perl School 和 LeanPub 提供的最新产品。硬核老王：本文作者 brian d foy 也是《 精通 Perl （ Mastering Perl ） 》 的作者，我是这本书是中文译者之一。一句话总结Perl 7 是 v5.32，设置不同而已。你的代码如果不是乱七八糟的，应该可以用。预计一年内会有用户发布。硬核老王：作为一个老 Perl 程序员，这个消息让我又动心了，认真考虑是不是再投回 Perl 的怀抱，哦不，是 Perl 7 的怀抱。
用 Perlbrew 在你系统上安装多个版本的 Perl。有比在系统上安装了 Perl 更好的事情吗？那就是在系统中安装了多个版本的 Perl。使用 Perlbrew 你可以做到这一点。但是为什么呢，除了让你包围在 Perl 下之外，有什么好处吗？简短的回答是，不同版本的 Perl 是......不同的。程序 A 可能依赖于较新版本中不推荐使用的行为，而程序 B 需要去年无法使用的新功能。如果你安装了多个版本的 Perl，则每个脚本都可以使用最适合它的版本。如果您是开发人员，这也会派上用场，你可以针对多个版本的 Perl 测试你的程序，这样无论你的用户运行什么，你都知道它能否工作。安装 Perlbrew另一个好处是 Perlbrew 会安装 Perl 到用户的家目录。这意味着每个用户都可以管理他们的 Perl 版本（以及相关的 CPAN 包），而无需与系统管理员联系。自助服务意味着为用户提供更快的安装，并为系统管理员提供更多时间来解决难题。第一步是在你的系统上安装 Perlbrew。许多 Linux 发行版已经在包仓库中拥有它，因此你只需要 dnf install perlbrew（或者适用于你的发行版的命令）。你还可以使用 cpan App::perlbrew 从 CPAN 安装 App::perlbrew 模块。或者你可以在 install.perlbrew.pl 下载并运行安装脚本。要开始使用 Perlbrew，请运行 perlbrew init。安装新的 Perl 版本假设你想尝试最新的开发版本（撰写本文时为 5.27.11）。首先，你需要安装包：perlbrew install 5.27.11 切换 Perl 版本现在你已经安装了新版本，你可以将它用于该 shell：perlbrew use 5.27.11 或者你可以将其设置为你帐户的默认 Perl 版本（假设你按照 perlbrew init 的输出设置了你的配置文件）：perlbrew switch 5.27.11 运行单个脚本你也可以用特定版本的 Perl 运行单个命令：perlberew exec 5.27.11 myscript.pl 或者，你可以针对所有已安装的版本运行命令。如果你想针对各种版本运行测试，这尤其方便。在这种情况下，请指定版本为 perl：plperlbrew exec perl myscriptpl 安装 CPAN 模块如果你想安装 CPAN 模块，cpanm 包是一个易于使用的界面，可以很好地与 Perlbrew 一起使用。用下面命令安装它：perlbrew install-cpanm 然后，你可以使用 cpanm 命令安装 CPAN 模块：cpanm CGI::simple 但是等下，还有更多！本文介绍了基本的 Perlbrew 用法。还有更多功能和选项可供选择。从查看 perlbrew help 的输出开始，或查看App::perlbrew 文档。你还喜欢 Perlbrew 的其他什么功能？让我们在评论中知道。via: https://opensource.com/article/18/7/perlbrew作者：Ben Cotton 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
这个简单优雅的模块可以让你包含调试或仅用于开发环境的代码，而在产品环境中隐藏它们。仅用于调试或开发调整时的 Perl 代码块有时会很有用。这很好，但是这样的代码块可能会对性能产生很大的影响, 尤其是在运行时才决定是否执行它。Curtis "Ovid" Poe 最近编写了一个可以帮助解决这个问题的模块：Keyword::DEVELOPMENT。该模块利用 Keyword::Simple 和 Perl 5.012 中引入的可插入关键字架构来创建了新的关键字：DEVELOPMENT。它使用 PERL_KEYWORD_DEVELOPMENT 环境变量的值来确定是否要执行一段代码。使用它不能更容易了：use Keyword::DEVELOPMENT; sub doing_my_big_loop { my $self = shift; DEVELOPMENT { # insert expensive debugging code here! } } 在编译时，DEVELOPMENT 块内的代码已经被优化掉了，根本就不存在。你看到好处了么？在沙盒中将 PERL_KEYWORD_DEVELOPMENT 环境变量设置为 true，在生产环境设为 false，并且可以将有价值的调试工具提交到你的代码库中，在你需要的时候随时可用。在缺乏高级配置管理的系统中，你也可以使用此模块来处理生产和开发或测试环境之间的设置差异：sub connect_to_my_database { my $dsn = "dbi:mysql:productiondb"; my $user = "db_user"; my $pass = "db_pass"; DEVELOPMENT { # Override some of that config information $dsn = "dbi:mysql:developmentdb"; } my $db_handle = DBI->connect($dsn, $user, $pass); } 稍后对此代码片段的增强使你能在其他地方，比如 YAML 或 INI 中读取配置信息，但我希望您能在此看到该工具。我查看了关键字 Keyword::DEVELOPMENT 的源码，花了大约半小时研究，“天哪，我为什么没有想到这个？”安装 Keyword::Simple 后，Curtis 给我们的模块就非常简单了。这是我长期以来在自己的编码实践中所需要的一个优雅解决方案。via: https://opensource.com/article/18/4/perl-module-debugging-code作者：Ruth Holloway 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
树莓派，随心所欲。我最近在 SVPerl （硅谷 Perl 聚会）谈到在树莓派上运行 Perl 语言的时候，有人问我，“我听说树莓派应该使用 Python ，是这样吗？”。我非常乐意回答他，这是个常见误解。树莓派可以支持任何语言： Python、Perl 和其他树莓派官方软件 Raspbian Linux 初始安装的语言。看似很厉害，其实很简单。树莓派的创造者英国的计算机科学教授 Eben Upton 曾经说过，树莓派名字中的‘派’（pi），是想为了听起来像 Python，因为他喜欢这门语言。他选择了这门语言作为孩子们的启蒙语言。但是他和他的团队做了一个通用计算机。开源软件没给树莓派任何限制。我们想运行什么就运行什么，全凭自己心意。我在 SVPerl 和这篇文章中还想讲第二点，就是介绍我的 “PiFlash” 脚本。虽然它是用 Perl 写的，但是不需要你有多了解 Perl 就可以在 Linux 下将树莓派系统自动化烧录到 SD 卡。这样对初学者就比较友好，避免他们在烧录 SD 卡时候，偶然擦除了整个硬盘。即使是高级用户也可以从它的自动化工作中受益，包括我，这也是我开发这个工具的原因。在 Windows 和 Mac 下也有类似的工具，但是树莓派网站没有介绍类似工具给 Linux 用户。不过，现在有了。开源软件早就有自己造轮子的传统，因为他们总是崇尚“自痒自挠”去解决问题。这种方式在 Eric S 1997 年的论文和 1999 年的书籍《大教堂与集市》中早有提及，它定义了开源软件的方法论。我也是为了满足想我这样的 Linux 用户，所以写了这个脚本。下载系统镜像想要开启树莓派之旅，你首先需要为它下载一个操作系统。我们称之为“系统镜像”文件。一旦你把它下载到你的桌面、手提电脑，或者甚至是另一个树莓派中，我就需要写入或者称之为“烧录”进你的 SD卡。详细情况可以看在线文件。手动做这件事情需要一些功底，你要把系统镜像烧录到整个 SD卡，而不是其中一块分区。系统镜像必须独自包含至少一个分区，因为树莓派引导需要一个 FAT32文件系统分区，系统引导这里开始。除了引导分区，其他分区可以是操作系统内核支持的任何分区类型。在大部分树莓派中，我们都运行的是某些使用 Linux 内核的发行版。已经有一系列树莓派中常用的系统镜像你可以下载使用。（当然，没什么能阻止你自己造轮子）树莓派基金会向新手推荐的是“NOOBS”系统。它代表了 “New Out of the Box System”（新鲜出炉即开即用系统），显然它好像听起来像术语 “noob"”（小白），通俗点说就是 “newbie”（菜鸟）。NOOBS 是一个基于树莓派的 Linux 系统，它会给你一个菜单可以在你的树莓派上自动下载安装几个其它的系统镜像。Raspbian Linux 是 Debian Linux 发行版的树莓派定制版。它是为树莓派开发的正式 Linux 发行版，并且由树莓派基金会维护。几乎所有树莓派驱动和软件都会在 Raspbian 上先试用，然后才会放到其它发行版上。其默认安装博客 Perl。Ubuntu Linux （还有其社区版的 Ubuntu MATE）也将树莓派作为其支持 ARM （Advanced RISC Machines）处理器的平台之一。RISC（Reduced Instruction Set Computer）Ubuntu 是一个 Debian Linux 的商业化支持的开源分支，它也使用 DEB 包管理器。Perl 也在其中。它仅仅支持 32 位 ARM7 或者 64 位 ARM8 处理器的树莓派 2 和 3。ARM6 的树莓派 1 和 Zero 从未被 Ubuntu 构建过程支持。Fedora Linux 支持树莓派2 ，而 Fedora 25 支持 3。 Fedora 是一个隶属于红帽（Red Hat）的开源项目。Fedora 是个基础，商业版的 RHEL（Red Hat Enterprise Linux）在其上增加了商业软件包和支持，所以其软件像所有的兼容红帽的发行版一样来自 RPM（Red Hat Package Manager） 软件包。就像其它发行版一样，也包括 Perl。RISC OS 是一个特别针对 ARM 处理器的单用户操作系统。如果你想要一个比 Linux 系统更加简洁的小型桌面（功能更少），你可以考虑一下。它同样支持 Perl。RaspBSD 是一个 FreeBSD 的树莓派发行版。它是一个基于 Unix 的系统，而不是 Linux。作为开源 Unix 的一员，它延续了 Unix 的功能，而且和 Linux 有着众多相似之处。包括有类似的开源软件带来的相似的系统环境，包括 Perl。OSMC，即开源多媒体中心，以及 LibreElec 电视娱乐中心，它们都基于运行 Linux 内核之上的 Kodi 娱乐中心。它是一个小巧、特化的 Linux 系统，所以不要期望它能支持 Perl。Microsoft Windows IoT Core 是仅运行在树莓派３上的新成员。你需要微软开发者身份才能下载。而作为一个 Linux 极客，我根本不看它。我的 PiFlash 脚本还不支持它，但如果你找的是它，你可以去看看。PiFlash 脚本如果你想看看树莓派 SD 卡烧录指导，你可以找到在 Windows 或者 Mac 系统下需要下载的工具来完成烧录任务。但是对于 Linux 系统，只有一系列手工操作建议。我已经手工做过这个太多次，这很容易引发一个开发者的本能去自动化这个过程，这就是 PiFlash 脚本的起源。这有点难，因为 Linux 有太多方法可以配置，但是它们都是基于 Linux 内核的。我总是觉得，手工操作潜在最大的失误恐怕就是偶然错误地擦除了某个设备，而不是擦除了 SD 卡，然后彻底清除了我本想保留在硬盘的东西。我在 SVPerl 演讲中也说了，我很惊讶地发现在听众中有犯了这种错误（而且不害怕承认）的人。因此，PiFlash 其中一个目的就是保护新手的安全，不会擦除 SD 卡之外的设备。PiFlash 脚本还会拒绝覆写包含了已经挂载的文件系统的设备。对于有经验的用户，包括我，PiFlash 脚本还提供提供一个简便的自动化服务。下载完系统镜像之后，我不需要必须从 zip格式中解压缩或者提取出系统镜像。PiFlash 可以直接提取它，不管是哪种格式，并且直接烧录到 SD 卡中。我把 PiFlash 及其指导发布在了 GitHub 上。命令行用法如下：piflash [--verbose] input-file output-device piflash [--verbose] --SDsearch input-file 参数是你要写入的系统镜像文件，只要是你从树莓派发行版网站下载的镜像都行。output-device 参数是你要写入的 SD 卡的块设备路径。你也可以使用 --SDsearch 参数列出挂载在系统中 SD 卡设备名称。可选项 --verbose 可以输出所有的程序状态数据，它在你需要帮助时或者递送 bug 报告和自行排错时很有用。它就是我开发时用的。下面的例子是我使用该脚本写入仍是 zip 存档的 Raspbian 镜像到位于 /dev/mmcblk0 的 SD 卡：piflash 2016-11-25-raspbian-jessie.img.zip /dev/mmcblk0 如果你已经指定了 /dev/mmcblk0p1 （SD 卡的第一分区），它会识别到这个分区不是一个正确的位置，并拒绝写入。在不同的 Linux 系统中怎样去识别哪个设备是 SD 卡是一个技术活。像 mmcblk0 这种在我的笔记本上是基于 PCI 的 SD卡接口。如果我使用了 USB SD 卡接口，它就是 /dev/sdb，这在多硬盘的系统中不好区分。然而，只有少量的 Linux 块设备支持 SD 卡。PiFlash 在这两种情况下都会检查块设备的参数。如果全部失败，它会认为可写入、可移动的，并有着正确物理扇区数量的 USB 驱动器是 SD 卡。我想这应该能涵盖大部分情况。但是，如果你使用了我不知道的 SD 卡接口呢？我乐意看到你的来信。请在输出信息中加上 --verbos --SDsearch 参数，以便让我可以知道你系统目前的环境。理想情况下，如果 PiFlash 脚本可以被广泛利用，我们可以构建一个开源社区去尽可能的帮助更多的树莓派用户。树莓派的 CPAN 模块CPAN（Comprehensive Perl Archive Network）是一个世界范围内包含各种 Perl 模块的的下载镜像。它们都是开源的。大量 CPAN 中的模块都是历久弥坚。对于成千上百的任务，你不需要重复造轮子，只要利用别人已经发布的代码就可以了。然后，你还可以提交你的新功能。尽管树莓派是个五脏俱全的 Linux 系统，支持大部分 CPAN 模块，但是这里我想强调一下专为树莓派硬件开发的东西。一般来说它们都用在测量、控制、机器人方面的嵌入式系统中。你可以通过 GPIO （General-Purpose Input/Output）针脚将你的树莓派连接到外部电子设备。可以使用树莓派 GPIO 针脚的模块如下：Device::SMBus、Device::I2C、Rpi::PIGPIO、Rpi::SPI、Rpi::WiringPi、Device::WebIO::RaspberryPI 和 Device::PiGlow。树莓派支持的嵌入式模块如下：UAV::Pilot::Wumpus::Server::Backend::RaspberryPiI2C、RPI::DHT11（温度/湿度）、RPI::HCSR04（超声波）、App::RPI::EnvUI、RPi::DigiPot::MCP4XXXX、RPI::ADC::ADS、Device::PaPiRus 和 Device::BCM2835::Timer。例子这里有些我们在树莓派上可以用 Perl 做的事情的例子。例一：在 OSMC 使用 PiFlash 播放视频本例中，你将练习如何设置并运行使用 OSMC 操作系统的树莓派。到 RaspberryPi.Org 下载区，下载最新的 OSMC 版本。将空 SD 卡插入你的 Linux 电脑或者笔记本。树莓派第一代是全尺寸的 SD 卡，除此以外都在使用 microSD，你也许需要一个通用适配器才能插入它。在插入前后分别运行 cat /proc/partitions 命令来看看系统分给硬件的设备名称。它可能像这样 /dev/mmcblk0 或者 /dev/sdb， 用如下命令将正确的系统镜像烧录到 SD 卡：piflash OSMC_TGT_rbp2_20170210.img.gz /dev/mmcblk0。弹出 SD 卡，将它插入树莓派中，接上 HDMI 显示器，开机。当 OSMC 设置完毕，插入一个 USB 设备，在里面放点视频。出于示范目的，我将使用 youtube-dl 程序下载两个视频。运行 youtube-dl OHF2xDrq8dY （彭博关于英国高新产业，包括树莓派的介绍）还有 youtube-dl nAvZMgXbE9c （CNet 发表的“排名前五的树莓派项目”) 。将它们下载到 USB 中，然后卸载移除设备。将 USB 设备插入到 OSMC 树莓派。点击视频选项进入到外部设备。只要你能在树莓派中播放视频，那么恭喜你，你已经完成了本次练习。玩的愉快。例二：随机播放目录中的视频的脚本这个例子将使用一个脚本在树莓派上的目录中乱序播放视频。根据视频的不同和设备的摆放位置，这可以用作信息亭显示的用途。我写这个脚本用来展示室内体验视频。设置树莓派引导 Raspbian Linux。连接到 HDMI 监视器。从 GitHub 上下载 do-video 脚本。把它放到树莓派中。跟随该页面的安装指导。最主要的事情就是安装 omxplayer 包，它可以使用树莓派硬件视频加速功能平滑地播放视频。在家目录的 Videos 目录下放一些视频。运行 do-video ，这样，应该就可以播放视频了例三：读取 GPS 数据的脚本这个例子更加深入，更有针对性。它展示了 Perl 怎么从外部设备中读取数据。在先前例子中出现的我的 GitHub上 “Perl on Pi” 有一个 gps-read.pl 脚本。它可以通过一系列端口从 GPS 读取 NMEA（国家海洋电子协会）的数据。页面还有教程，包括构建它所使用的 AdaFruit Industries 部分，但是你可以使用任何能输出 NMEA 数据的 GPS。通过这些任务，我想你应该可以在树莓派上像使用其他语言一样使用 Perl了。希望你喜欢。作者简介：Ian Kluft - 上学开始，Ian 就对喜欢编程和飞行。他一直致力于 Unix 的工作。在 Linux 内核发布后的六个月他转向了 Linux。他有计算机科学硕士学位，并且拥有 CSSLP 资格证（认证规范开发流程专家），另一方面，他还是引航员和认证的飞机指令长。作为一个超过二十五年的认证的无线电爱好者，在近些年，他在一些电子设备上陆续做了实验，包括树莓派。via: https://opensource.com/article/17/3/perl-raspberry-pi作者：Ian Kluft 译者：Taylor1024 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出