蚊章汇 - Perl
type: channel
link: https://linuxcn.bwsl.wang/tag/Perl/
items: 硬核观察 #651 Perl 7 依然遥遥无期
items: Perl 语言基础入门
items: 硬核观察 | PowerShell 成为关键安全威胁的首要来源
items: 硬核观察 | 因北美暴风雪，Linus Torvalds 遭遇六天断电后发布了内核“冰封废土”
items: 硬核观察 | Excel 现在具备了图灵完备性，成为第一大编程语言
items: 《代码英雄》第三季（4）：深入 Perl 语言的世界
items: Perl 继续前行，Perl 7 将是下一代（硬核老王点评版）
items: Perlbrew 入门
items: 一个可以更好地调试的 Perl 模块
items: 在树莓派中开启激动人心的 Perl 之旅

硬核观察 #651 Perl 7 依然遥遥无期
type: item
date: 2022-05-30T03:05:53+08:00
description: 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 语言基础入门
type: item
date: 2022-02-23T01:12:42+08:00
description: 下载这份编程速查表，开始学习 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 di…

硬核观察 | PowerShell 成为关键安全威胁的首要来源
type: item
date: 2021-05-24T04:17:14+08:00
description: 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 遭遇六天断电后发布了内核“冰封废土”
type: item
date: 2021-03-02T21:20:11+08:00
description: 因北美暴风雪，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 现在具备了图灵完备性，成为第一大编程语言
type: item
date: 2021-02-02T21:54:44+08:00
description: 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 称，“我们调整了一些领导人和业务部门，以继续推动增长 —— 我们每年都会这样做。”其实，作为目前热点的区块链，在我看来，有些联盟链项目本身就是伪概念。如果上述情况属实，不知道国内的相关区块链行业会不会也有类似变化。

《代码英雄》第三季（4）：深入 Perl 语言的世界
type: item
date: 2020-12-03T20:37:00+08:00
description: 代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。什么是《代码英雄》 代码英雄 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 也到达了一个相当特定的时期，人们已经准备好以这样的方式迎接技术的兴起。0…

Perl 继续前行，Perl 7 将是下一代（硬核老王点评版）
type: item
date: 2020-06-26T06:44:37+08:00
description: 近日召开的 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 ） ）有…

Perlbrew 入门
type: item
date: 2018-07-23T19:41:55+08:00
description: 用 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 模块
type: item
date: 2018-05-21T15:55:10+08:00
description: 这个简单优雅的模块可以让你包含调试或仅用于开发环境的代码，而在产品环境中隐藏它们。仅用于调试或开发调整时的 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中国 荣誉推出

在树莓派中开启激动人心的 Perl 之旅
type: item
date: 2017-09-01T19:00:30+08:00
description: 树莓派，随心所欲。我最近在 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，即开源多媒体中心，以及 LibreEle…