Files
everything-claude-code/rules/perl/patterns.md
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.