Apply modern Perl 5.36+ idioms and best practices for maintainable applications.
This skill appears to be a prompt-only guidance/documentation asset for modern Perl 5.36+ practices, with no required secrets, no declared remote endpoints, and no evident local execution or data-access capability. Given the open-source GitHub source and strong community adoption, overall risk is low; the main caveat is supply-chain uncertainty due to an undeclared license and unknown maintenance status.
The material explicitly states that no keys or environment variables are required. The README is primarily coding guidance and examples, with no request for API tokens, account credentials, or other sensitive configuration, so credential exposure and misuse risk is low.
No remote endpoints are declared, and the system checks classify it as prompt-only. While the documentation includes example snippets such as DBI connections, there is no indication that the skill itself initiates network access, uploads user data, or sends content to third-party services.
Based on the provided material, this is a development-patterns and best-practices guide rather than an executable agent or local tool. There is no sign of process spawning, shell execution, system command invocation, or expanded system permissions.
No permission scope is declared for reading or writing local files, databases, clipboards, or other resources. File-reading examples in the README are instructional Perl code only and do not indicate that the skill itself has actual data-access capability, so there is no sign of overbroad access.
Positive factors include being open-source on GitHub, auditable, and having strong community adoption (about 210.5k stars), all of which materially lower risk. However, the license is undeclared, maintenance status is unknown, and the provided description alone does not fully verify that the repository exactly matches the skill, so the supply-chain dimension warrants caution rather than a high-risk rating.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "perl-patterns" skill from askskill: 1. Download https://raw.githubusercontent.com/affaan-m/ECC/main/skills/perl-patterns/SKILL.md 2. Save it as ~/.claude/skills/perl-patterns/SKILL.md 3. Reload skills and tell me it's ready
Refactor this legacy Perl code to follow Perl 5.36+ idioms. Explain which modern features, maintainability improvements, and potential risks are involved.
Returns refactored code plus notes on modern idioms, improvements, and caveats.
Create guidelines for a medium-sized Perl application covering project structure, module organization, error handling, testing, and naming conventions using modern Perl best practices.
Provides a clear project convention checklist for consistent team development and maintenance.
Review this Perl code against modern Perl 5.36+ best practices. Identify issues in readability, robustness, error handling, and test coverage, then suggest improvements.
Returns a structured review with actionable recommendations for improvement.
Idiomatic Perl 5.36+ patterns and best practices for building robust, maintainable applications.
Apply these patterns as a bias toward modern Perl 5.36+ defaults: signatures, explicit modules, focused error handling, and testable boundaries. The examples below are meant to be copied as starting points, then tightened for the actual app, dependency stack, and deployment model in front of you.
v5.36 PragmaA single use v5.36 replaces the old boilerplate and enables strict, warnings, and subroutine signatures.
# 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!";
}
Use signatures for clarity and automatic arity checking.
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;
# ...
}
Understand scalar vs list context — a core Perl concept.
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
Use postfix dereference syntax for readability with nested structures.
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} };
isa Operator (5.32+)Infix type-check — replaces blessed($o) && $o->isa('X').
use v5.36;
if ($obj isa 'My::Class') { $obj->do_something }
use v5.36;
sub parse_config($path) {
my $content = eval { path($path)->slurp_utf8 };
die "Config error: $@" if $@;
return decode_json($content);
}
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;
}
use v5.40;
sub divide($x, $y) {
try {
die "Division by zero" if $y == 0;
return $x / $y;
}
catch ($e) {
warn "Error: $e";
return;
}
}
Prefer Moo for lightweight, modern OO. Use Moose only when its metaprotocol is needed.
# 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 });
…
Record polished web app UI demo videos for walkthroughs, tutorials, and showcases.
Refine retrieved context iteratively to improve subagent understanding and output quality.
Unify multi-channel notifications for routing, deduplication, escalation, and inbox consolidation.
Audit, plan, and implement SEO improvements for better search visibility.
Create iOS liquid glass interfaces with dynamic visuals and interactive morphing.
Fetches up-to-date framework docs for setup, APIs, and code examples.
Learn idiomatic Go patterns and best practices for robust, maintainable applications.
Learn idiomatic Rust patterns, ownership, concurrency, and robust error handling practices.
Learn secure Perl practices to prevent common code and web vulnerabilities.
Learn Pythonic patterns, type hints, and best practices for maintainable code.
Apply idiomatic Kotlin patterns to build robust, efficient, maintainable applications.
Write, run, and improve Perl automated tests with coverage analysis.