Pular para o conteúdo
Skillpedia
Código em geral280 mil · #95

perl-patterns

Ajuda seu agente a escrever código Perl moderno e de fácil manutenção. Segue as melhores práticas para criar aplicações robustas.

O que ela faz

Esta ferramenta ajuda a escrever código moderno e de fácil manutenção na linguagem de programação Perl. Ela sugere as melhores práticas e padrões de escrita para que seu código funcione bem e seja fácil de entender por outros programadores.

Quando usar

  • ✓Ao começar a escrever um novo programa em Perl.
  • ✓Quando você revisa o código de outra pessoa para garantir que ele segue as regras atuais.
  • ✓Ao atualizar um código antigo para as versões mais recentes do Perl.

Exemplo do que pedir para a IA

“Como posso escrever uma função em Perl que aceite um nome e uma idade, com a idade tendo um valor padrão?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/perl-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/perl-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta aplica um conjunto de regras e exemplos para guiar a escrita do código. Ela foca em usar recursos modernos do Perl, como assinaturas de funções e melhor tratamento de erros, para tornar o código mais claro e seguro.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill perl-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/perl-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Desenvolvimento Moderno em Perl

Padrões idiomáticos do Perl 5.36+ e melhores práticas para construir aplicações robustas e de fácil manutenção.

Quando Ativar

  • Escrevendo código ou módulos Perl novos
  • Revisando código Perl para conformidade com o idioma
  • Refatorando código Perl legado para padrões modernos
  • Projetando a arquitetura de módulos Perl
  • Migrando código anterior ao 5.36 para Perl moderno

Como Funciona

Aplique estes padrões como uma preferência pelos padrões padrão do Perl 5.36+: assinaturas, módulos explícitos, tratamento de erros focado e limites testáveis. Os exemplos abaixo destinam-se a serem copiados como pontos de partida, depois ajustados para o aplicativo real, a pilha de dependências e o modelo de implantação à sua frente.

Princípios Essenciais

1. Use a Pragma v5.36

Um único use v5.36 substitui o antigo boilerplate e habilita strict, warnings e assinaturas de sub-rotina.

# Good: Modern preamble
use v5.36;

sub greet($name) {
    say "Hello, $name!";
}

# Bad: Legacy boilerplate
use strict;
use warnings;
use feature 'say', 'signatures';
no warnings 'experimental::signatures';

sub greet {
    my ($name) = @_;
    say "Hello, $name!";
}

2. Assinaturas de Sub-rotina

Use assinaturas para clareza e verificação automática de aridade.

use v5.36;

# Good: Signatures with defaults
sub connect_db($host, $port = 5432, $timeout = 30) {
    # $host is required, others have defaults
    return DBI->connect("dbi:Pg:host=$host;port=$port", undef, undef, {
        RaiseError => 1,
        PrintError => 0,
    });
}

# Good: Slurpy parameter for variable args
sub log_message($level, @details) {
    say "[$level] " . join(' ', @details);
}

# Bad: Manual argument unpacking
sub connect_db {
    my ($host, $port, $timeout) = @_;
    $port    //= 5432;
    $timeout //= 30;
    # ...
}

3. Sensibilidade ao Contexto

Entenda o contexto escalar vs. lista — um conceito central do Perl.

use v5.36;

my @items = (1, 2, 3, 4, 5);

my @copy  = @items;            # List context: all elements
my $count = @items;            # Scalar context: count (5)
say "Items: " . scalar @items; # Force scalar context

4. Desreferenciamento Pós-fixo

Use a sintaxe de desreferenciamento pós-fixo para legibilidade com estruturas aninhadas.

use v5.36;

my $data = {
    users => [
        { name => 'Alice', roles => ['admin', 'user'] },
        { name => 'Bob',   roles => ['user'] },
    ],
};

# Good: Postfix dereferencing
my @users = $data->{users}->@*;
my @roles = $data->{users}[0]{roles}->@*;
my %first = $data->{users}[0]->%*;

# Bad: Circumfix dereferencing (harder to read in chains)
my @users = @{ $data->{users} };
my @roles = @{ $data->{users}[0]{roles} };

5. O Operador isa (5.32+)

Verificação de tipo infixa — substitui blessed($o) && $o->isa('X').

use v5.36;
if ($obj isa 'My::Class') { $obj->do_something }

Tratamento de Erros

Padrão eval/die

use v5.36;

sub parse_config($path) {
    my $content = eval { path($path)->slurp_utf8 };
    die "Config error: $@" if $@;
    return decode_json($content);
}

Try::Tiny (Tratamento de Exceções Confiável)

use v5.36;
use Try::Tiny;

sub fetch_user($id) {
    my $user = try {
        $db->resultset('User')->find($id)
            // die "User $id not found\n";
    }
    catch {
        warn "Failed to fetch user $id: $_";
        undef;
    };
    return $user;
}

try/catch Nativo (5.40+)

use v5.40;

sub divide($x, $y) {
    try {
        die "Division by zero" if $y == 0;
        return $x / $y;
    }
    catch ($e) {
        warn "Error: $e";
        return;
    }
}

OO Moderno com Moo

Prefira Moo para OO moderno e leve. Use Moose apenas quando seu metaprotocolo for necessário.

# Good: Moo class
package User;
use Moo;
use Types::Standard qw(Str Int ArrayRef);
use namespace::autoclean;

has name  => (is => 'ro', isa => Str, required => 1);
has email => (is => 'ro', isa => Str, required => 1);
has age   => (is => 'ro', isa => Int, default  => sub { 0 });
has roles => (is => 'ro', isa => ArrayRef[Str], default => sub { [] });

sub is_admin($self) {
    return grep { $_ eq 'admin' } $self->roles->@*;
}

sub greet($self) {
    return "Hello, I'm " . $self->name;
}

1;

# Usage
my $user = User->new(
    name  => 'Alice',
    email => 'alice@example.com',
    roles => ['admin', 'user'],
);

# Bad: Blessed hashref (no validation, no accessors)
package User;
sub new {
    my ($class, %args) = @_;
    return bless \%args, $class;
}
sub name { return $_[0]->{name} }
1;

Papéis (Roles) do Moo


…
Perguntas frequentes

O que são 'assinaturas de função'?

São uma forma mais clara de definir quais informações uma função espera receber, como se fossem os campos de um formulário, tornando o código mais fácil de ler e menos propenso a erros.

O que significa 'código de fácil manutenção'?

Significa que o código é escrito de uma forma que outras pessoas (ou você mesmo no futuro) consigam entender, modificar e corrigir sem muita dificuldade.

Por que usar 'padrões modernos'?

Padrões modernos geralmente incluem melhorias em segurança, clareza e eficiência, além de serem compatíveis com as versões mais recentes da linguagem, garantindo que você aproveite os recursos mais recentes.

Detalhes

Descrição original do autor

Modern Perl 5.36+ idioms, best practices, and conventions for building robust, maintainable Perl applications. Use when writing or reviewing modern Perl 5.36+ code.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#95
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas