Files
everything-claude-code/rules/perl/patterns.md
Necip Sunmaz ae5c9243c9 feat: add Perl language rules and update documentation
Add rules/perl/ with 5 rule files (coding-style, testing, patterns,
  hooks, security) following the same structure as existing languages.
  Update README.md, README.zh-CN.md, and rules/README.md to document
  Perl support including badges, directory trees, install instructions,
  and rule counts.
2026-03-10 20:42:54 -07:00

1.4 KiB

paths
paths
**/*.pl
**/*.pm
**/*.t
**/*.psgi
**/*.cgi

Perl Patterns

This file extends common/patterns.md with Perl specific content.

Repository Pattern

Use DBI or DBIx::Class behind an interface:

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):

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
use autodie;
use Path::Tiny;

my $content = path('config.json')->slurp_utf8;

Module Interface

Use Exporter 'import' with @EXPORT_OK — never @EXPORT:

use Exporter 'import';
our @EXPORT_OK = qw(parse_config validate_input);

Dependency Management

Use cpanfile + carton for reproducible installs:

carton install
carton exec prove -lr t/

Reference

See skill: perl-patterns for comprehensive modern Perl patterns and idioms.