d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
77 lines
1.4 KiB
Markdown
77 lines
1.4 KiB
Markdown
---
|
|
paths:
|
|
- "**/*.pl"
|
|
- "**/*.pm"
|
|
- "**/*.t"
|
|
- "**/*.psgi"
|
|
- "**/*.cgi"
|
|
---
|
|
# Perl Patterns
|
|
|
|
> This file extends [common/patterns.md](../common/patterns.md) with Perl-specific content.
|
|
|
|
## Repository Pattern
|
|
|
|
Use **DBI** or **DBIx::Class** behind an interface:
|
|
|
|
```perl
|
|
package MyApp::Repo::User;
|
|
use Moo;
|
|
|
|
has dbh => (is => 'ro', required => 1);
|
|
|
|
sub find_by_id ($self, $id) {
|
|
my $sth = $self->dbh->prepare('SELECT * FROM users WHERE id = ?');
|
|
$sth->execute($id);
|
|
return $sth->fetchrow_hashref;
|
|
}
|
|
```
|
|
|
|
## DTOs / Value Objects
|
|
|
|
Use **Moo** classes with **Types::Standard** (equivalent to Python dataclasses):
|
|
|
|
```perl
|
|
package MyApp::DTO::User;
|
|
use Moo;
|
|
use Types::Standard qw(Str Int);
|
|
|
|
has name => (is => 'ro', isa => Str, required => 1);
|
|
has email => (is => 'ro', isa => Str, required => 1);
|
|
has age => (is => 'ro', isa => Int);
|
|
```
|
|
|
|
## Resource Management
|
|
|
|
- Always use **three-arg open** with `autodie`
|
|
- Use **Path::Tiny** for file operations
|
|
|
|
```perl
|
|
use autodie;
|
|
use Path::Tiny;
|
|
|
|
my $content = path('config.json')->slurp_utf8;
|
|
```
|
|
|
|
## Module Interface
|
|
|
|
Use `Exporter 'import'` with `@EXPORT_OK` — never `@EXPORT`:
|
|
|
|
```perl
|
|
use Exporter 'import';
|
|
our @EXPORT_OK = qw(parse_config validate_input);
|
|
```
|
|
|
|
## Dependency Management
|
|
|
|
Use **cpanfile** + **carton** for reproducible installs:
|
|
|
|
```bash
|
|
carton install
|
|
carton exec prove -lr t/
|
|
```
|
|
|
|
## Reference
|
|
|
|
See skill: `perl-patterns` for comprehensive modern Perl patterns and idioms.
|