用途
该技能面向现代 Perl 开发,提供 Perl 5.36+ 的惯用模式与最佳实践,帮助构建健壮、可维护的应用程序。它适用于以下场景:编写新的 Perl 代码或模块;审查 Perl 代码是否符合惯用写法;将遗留 Perl 重构为现代标准;设计 Perl 模块架构;将 5.36 之前的代码迁移到现代 Perl。
其工作方式是将这些模式作为偏向现代 Perl 5.36+ 默认值的倾向来应用:签名、显式模块、聚焦的错误处理以及可测试的边界。示例可作为起点,再根据实际应用、依赖栈和部署模型进行调整。
主要能力
核心原则
- 使用 v5.36 前置声明:单条
use v5.36;取代旧样板,并启用 strict、warnings 和子程序签名。 - 子程序签名:使用签名提升清晰度并自动进行参数数量检查,支持默认值与 slurpy 参数。
- 上下文敏感:理解标量上下文与列表上下文这一 Perl 核心概念。
- 后缀解引用:对嵌套结构使用后缀解引用语法以提升可读性。
- isa 运算符(5.32+):中缀类型检查,取代
blessed($o) && $o->isa('X')。
错误处理
- eval/die 模式:用于简单场景。
- Try::Tiny:可靠的异常处理。
- 原生 try/catch(5.40+):使用
use v5.40;的原生语法。
现代面向对象
- Moo:优先用于轻量、现代的 OO;仅在需要其元协议时使用 Moose。示例包含带类型约束的属性、默认值和方法。
- Moo 角色:通过
Moo::Role定义可复用角色,如序列化角色。 - 原生 class 关键字(5.38+,Corinna):使用
use feature 'class'定义类、字段与方法。
正则表达式
- 命名捕获与 /x 标志:提升可读性与可维护性。
- 预编译模式:使用
qr//编译一次、多次使用。
数据结构
- 引用与安全深层访问:缺失层级返回 undef 而不报错。
- 哈希切片、数组切片。
- 多变量 for 循环(5.36 实验性,5.40 稳定)。
文件 I/O
- 三参数 open:配合 autodie 消除
or die。 - Path::Tiny:用于文件操作,如 slurp_utf8、spew_utf8、遍历目录。
模块组织
- 标准项目布局:lib/、bin/、t/、cpanfile、Makefile.PL、.perlcriticrc。
- Exporter 模式:使用
use Exporter 'import'、@EXPORT_OK 与 %EXPORT_TAGS。
工具
- perltidy 配置(.perltidyrc):缩进、行宽、续行缩进、cuddled else、开括号同行等。
- perlcritic 配置(.perlcriticrc):severity、theme、具体策略设置。
- 依赖管理(cpanfile + carton):安装工具、安装依赖、以本地依赖运行。
快速参考与反模式
提供遗留模式到现代替代的对照表(如 use strict; use warnings; → use v5.36;,@{ $ref } → $ref->@*,$1, $2 → $+{name} 等),并列出反模式:两参数 open、间接对象语法、过度依赖 $_、禁用 strict refs、用全局变量作配置、用字符串 eval 加载模块。
使用方式
该技能以模式与示例形式提供,可直接复制示例作为起点,再根据实际应用、依赖栈与部署模型收紧。工具配置部分给出 .perltidyrc 与 .perlcriticrc 的配置项,依赖管理部分给出 cpanm、carton 的安装与运行命令。
适用场景
- 编写或审查现代 Perl 5.36+ 代码。
- 将旧版 Perl 重构为现代标准。
- 设计 Perl 模块架构。
- 将 5.36 之前的代码迁移到现代 Perl。
限制
资料未提供该技能的安装方式、收费模式、平台支持范围或具体效果数据,这些信息暂未提供。部分特性有版本要求:isa 运算符需 5.32+,原生 try/catch 需 5.40+,原生 class 关键字需 5.38+,多变量 for 循环在 5.36 为实验性、5.40 稳定。