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
Mensagem pronta para colar
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-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/perl-patterns/SKILL.md -o SKILL.mdConteú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
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail