---
paths:
  - "**/*.pl"
  - "**/*.pm"
  - "**/*.t"
  - "**/*.psgi"
  - "**/*.cgi"
---

# Perl 编码风格

> 本文档在 [common/coding-style.md](../common/coding-style.md) 的基础上，补充了 Perl 相关的内容。

## 标准

* 始终 `use v5.36`（启用 `strict`、`warnings`、`say` 和子程序签名）
* 使用子程序签名 — 切勿手动解包 `@_`
* 优先使用 `say` 而非显式换行的 `print`

## 不可变性

* 对所有属性使用 **Moo**，并配合 `is => 'ro'` 和 `Types::Standard`
* 切勿直接使用被祝福的哈希引用 — 始终通过 Moo/Moose 访问器
* **面向对象覆盖说明**：对于计算得出的只读值，使用 Moo `has` 属性并配合 `builder` 或 `default` 是可以接受的

## 格式化

使用 **perltidy** 并采用以下设置：

```
-i=4    # 4-space indent
-l=100  # 100 char line length
-ce     # cuddled else
-bar    # opening brace always right
```

## 代码检查

使用 **perlcritic**，严重级别设为 3，并启用主题：`core`、`pbp`、`security`。

```bash
perlcritic --severity 3 --theme 'core || pbp || security' lib/
```

## 参考

查看技能：`perl-patterns`，了解全面的现代 Perl 惯用法和最佳实践。
