📖 About Perl
Perl is a high-level, general-purpose programming language known for its text processing capabilities and flexibility. Modern Perl (5.38+) brings significant improvements with subroutine signatures, better OO support, and strong typing options.
🎯 Best For
- Text processing and parsing
- System administration and automation
- Web development with Catalyst/Dancer
- Bioinformatics and data analysis
- Legacy system maintenance
🔧 Key Features
- Subroutine signatures (v5.38+)
- Moose/Moo for modern OO programming
- Type::Tiny for type constraints
- Result pattern for error handling
- CPAN - Comprehensive Perl Archive Network
- Regular expressions built into the language
🛠️ Development Tools
Build
perl Makefile.PL && make
Test
prove -l t/
Coverage
cover -test
Install
cpanm --installdeps .
📄 Package Contents (7 files)
AGENTS_RULES.md
Complete AI agent rules (universal)
- PERL-specific best practices
- TDD workflow (Red-Green-Refactor)
- DDD principles and patterns
- Git workflow and commit format
- Code quality principles
.cursorrules
Quick reference for Cursor IDE
- Essential rules summary
- Links to full documentation
- Optimized for quick loading
.gitignore
Git exclusions
- PERL-specific patterns
- Build artifacts
- IDE configuration files
- Dependency directories
AGENTS.md
Quick reference guide
- Common patterns
- Best practices summary
- Quick troubleshooting
README.md
Project template with examples
- Setup instructions
- Sample code and structure
- Testing examples
- Build and run commands
CODE_QUALITY_PRINCIPLES.md
Quality principles and best practices
- Avoid default values (fail-fast)
- Consistency across code paths
- Extract reusable functions
- PERL-specific examples
CONTRIBUTING.md
Contribution guidelines
- TDD workflow (Red-Green-Refactor)
- Git commit format
- Code review process
- Testing requirements (90% coverage)
💻 Code Examples
Subroutine Signatures
use v5.38;
sub greet($name, $title = 'Mr.') {
say "Hello, $title $name!";
}
greet('Smith'); # Hello, Mr. Smith!
Moose Class
package User; use Moose; use Types::Standard qw(Str Int); has 'name' => (is => 'ro', isa => Str, required => 1); has 'age' => (is => 'rw', isa => Int); __PACKAGE__->meta->make_immutable;
Result Pattern
sub divide($x, $y) {
return Result::Error->new("Division by zero")
if $y == 0;
return Result::Ok->new($x / $y);
}