# Awesome Perl

A curated list of awesome Perl resources, including frameworks, libraries and software. Inspired by awesome-go.

### Another module list

We also recommend these lists.

- Task::Kensho
- Perlres - A list of resources about Perl
- PerlMaven.com list of Perl Software
- Slaven’s CPAN in a nutshell
- Many Task::** Modules. (ex. Task::Plack, Task::BeLike::<AuthorName>…)

### Contents

- Awesome Perl
  - Args
  - Audio
    - Digital Signal Processing
  - Benchmarks
  - Caches
  - Class Builder
  - CLI
  - Cloud
  - Cryptography
  - Commercial WebServices
  - Container
  - Data Format
  - Database
  - Database Drivers
    - Relational Databases
    - NoSQL Databases
  - Date & Time
  - Devices
  - DevOps
  - Email
  - Event Loops
  - Exception Handling
  - DOM Manipulation
  - File Manipulation
  - Form Frameworks
  - Images
  - List Manipulation
  - Logging
  - Module Development
  - Network
  - ORM
  - Package Management
  - Processes and Threads
  - Profiling
  - Protocol
  - Queueing
  - REST Frameworks
  - Science/Numerics
  - Stream Manipulation
  - Template Engines
  - Testing
    - Testing Frameworks
    - Test Double
    - Coverage
  - Tools
  - Type Checking
  - Video
  - Web Frameworks
    - Middlewares
  - Web Frameworks-Like
  - Web Scraping
  - Network Security
  - Digital Forensics
  - Reverse Engineering

## Args

Libraries for argument manifestation and validation.

- Data::Validator - Rule based validator on type constraint system.
- Params::Util - Simple, compact and correct param-checking functions.
- Params::ValidationCompiler - Validate method/function parameters.
- Smart::Args

## Audio

- Audio::CD - Interface to libcdaudio (cd + cddb)
- Audio::Wav - Modules for reading & writing Microsoft WAV files.
- Audio::SndFile - Perl library for reading and writing sound files
- Audio::Ao - A Perl wrapper for the Ao audio library
- MIDI::ALSA - the perl ALSA library, plus some interface functions

### DSP

- Audio::Analyzer - Demodulate Audio through FFT and perl!
- Audio::Analyzer::ToneDetect - Detect freq of tones in an audio file or stream

## Benchmarks

Libraries for benchmarking

- Benchmark
- Dumbbench
- Parallel::Benchmark - Benchmark in multiprocesses

## Caches

Libraries to talk to Cache Softwares

- CHI - Unified cache handling interface, think DBI for caches
- CHI::Driver::DBI - DBI driver for CHI
- CHI::Driver::DBIC - DBIx::Class driver for CHI
- CHI::Driver::Memcached - Memcached driver for CHI
- CHI::Driver::MongoDB - MongoDB driver for CHI
- CHI::Driver::Redis - Redis driver for CHI
- Catalyst::Plugin::Session::Store::CHI - Use CHI module to handle storage backend for session data
- CGI::Application::Plugin::CHI - CGI-App plugin for CHI caching interface
- Mojolicious::Plugin::CHI - Interact with CHI caches

## Class Builder

Libraries to support writing classes and meta programming

- Class::Accessor::Lite - Simple accessor generator.
- Class::Accessor::Lite::Lazy - Generate lazy accessors.
- Homer - Simple Prototype-based object system.
- Mo - Micro Objects. Mo is less.
- Moo - Class builder supporting meta programming.
- Moose - The one and only, Moose.
- Mouse - Yet another class builder like Moo/Moose.
- Object::Pad - `class Example { has $x; method reader { return $x } }`, experimental proving-ground for Cor
- Object::Tiny - A class builder that is terse, fast, and tiny.

## CLI

Libraries for developing CLI applications

- App::Cmd - Write command line apps with less suffering.
- Getopt::Long - Extended processing of command line options.

## Cloud

- AWS::CloudFront - Lightweight interface to Amazon CloudFront CDN
- AWS::S3 - Lightweight interface to Amazon S3 (Simple Storage Service)
- Net::Amazon::EC2 - Interface to the Amazon Elastic Compute Cloud (EC2) environment.
- Net::AWS::SES - Perl extension that implements Amazon Simple Email Service (SES) client
- WebService::DigitalOcean - Access the DigitalOcean RESTful API (v2)
- WebService::Dropbox - Interface to Dropbox API

## Cryptography

- Bitcoin::Crypto - Bitcoin cryptography in Perl
- CryptX - Cryptographic toolkit

## Commercial WebServices

- Net::Xero - Interface to Xero accounting
- PagerDuty::Agent - A perl PagerDuty client
- WebService::Spotify - A simple interface to the Spotify Web API
- WebService::Xero - Access Xero Accounting Package Public and Private Application API
- WWW::Shopify - object representing acess to a particular Shopify store
- WWW::Spotify - Spotify Web API Wrapper

## Container

Libraries for Singleton Pattern implementation.

- Object::Container

## Data Format

Libraries for serializing, formatting and parsing

- BSON - Binary JSON format
- CBOR::Free - Support for CBOR, IETF’s “binary JSON”
- Data::Dumper::Simple - Reduce and faster Data::Dumper and eval() equivalent
- Data::MessagePack
- JSON::PP
- JSON::XS
- Sereal
- Storable
- Text::CSV
- Text::CSV_XS
- Text::Markdown
- TOML
- XML::LibXML
- XML::Compile::Schema - Interpret schema elements and types: create processors for XML messages.
- XML::Compile::SOAP - Implements the SOAP 1.1 protocol, client side.
- XML::Compile::WSDL - Use SOAP with a WSDL version 1.1 communication specification file.
- YAML

## Database

Libraries for dealing with relational databases

- DBI
- DBIx::Connector - Fast, safe DBI connection and transaction management
- DBIx::Handler - Fork-safe DBI handler
- DBIx::Inspector
- DBIx::QueryLog
- DBIx::Sunny - Useful DBI Wrapper
- DBIx::TransactionManager

## Database Drivers

Libraries for using specific database products

### Relational Databases

- DBD::CSV
- DBD::Firebird
- DBD::MariaDB - MariaDB and MySQL driver for the Perl5 Database Interface (DBI)
- DBD::mysql
- DBD::ODBC - Any ODBC Driver. MS-SQL w/ placeholders
- DBD::Oracle - Oracle database driver for the DBI module
- DBD::Pg - PostgreSQL driver for DBI.
- DBD::SQLite
- DBD::Sybase - Sybase and MS-SQL. No placeholders w/ MS-SQL though

### NoSQL Databases

- Cache::Memcached::Fast
- Mango - Pure-Perl non-blocking I/O MongoDB driver
- Redis
- Redis::Fast - Perl wrapper around hiredis driver
- Search::Elasticsearch - Offical Elasticsearch client library
- UnQLite

## Date & Time

Libraries for working with dates and times

- DateTime
- Time::Moment
- Time::Piece

## Devices

Libraries to talk to physical devices

- Device::SerialPort - Generic Serial Port library for serial line communication
- Device::Modem - Talk to modem devices conneted via serial port
- Device::Onkyo - Control Onkyo/Integra AV equipment via LAN or Serial
- Chipcard::PCSC::Card - Control Smart card using perl and PCSC
- Device::XBee::API - Control XBee Device using pure perl code
- Device::Firmata - module for controlling Firmata devices like Arduino

## DevOps Tools

Libraries that help when you want to deploy software across networks on several hosts/are working across computer networks

- Rex - Remote Execution

## Email

Libraries that implement email creation and sending

- Email::Sender
- Email::Reply
- Email::Stuffer

## Event Loops

Libraries for various event loops. Asynchronous programming if you like

- AE - Simpler, faster, newer AnyEvent API
- AnyEvent - the DBI of event loop programming
- EV - Uses libev, very fast and popular. Default for AnyEvent if present
- Event - Works well, but older
- IO::Async - Asynchronous event-driven programming
- POE - Common interface for several event loops
- Promise::XS - Promises in Perl

## Exception Handling

Libraries that assist with and/or provide alternatives to eval{ die() }

- autodie - Replace functions with ones that succeed or die with lexical scope
- Exception::Class - A module that allows you to declare real exception classes in Perl
- Syntax::Keyword::Try - a try/catch/finally syntax for perl
- Throwable - a role for classes that can be thrown
- Try::Tiny - minimal try/catch with proper preservation of $@
- TryCatch - first class try catch semantics for Perl, without source filters

## DOM Manipulation

- HTML5::DOM - Super fast html5 DOM library with css selectors (based on Modest/MyHTML).

## File Manipulation

- File::Util - Easy, versatile, portable file handling.
- Path::Tiny - Simple object-oriented file manipulation.

## Form Frameworks

Libraries that take the boredom & repetition out of (web and UI) forms

- Catalyst::Controller::HTML::FormFu - Use HTML::FormFu in Catalyst.
- CGI::FormBuilder - Easily generate and process stateful forms.
- Form::Sensible - A sensible way to handle form based user interface.
- Form::Tiny - Forms reusing Type::Tiny type constraints.
- Form::Toolkit - A toolkit to build Data centric Forms.
- HTML::FormFu - HTML Form Creation, Rendering and Validation Framework.
- HTML::FormFu::ExtJS - ExtJS form generation from HTML::FormFu config files.
- HTML::FormHandler - HTML forms using Moose.
- Mojolicious::Plugin::FormFields - Lightweight, flexible form builder with validation and filtering.
- WWW::Form - Simple and extendable module that allows developers to handle HTML form input validation and display flexibly and consistently.

## Images

Libraries for manipulating images

- Image::Magick - An object-oriented interface to ImageMagick’s image composing libraries.
- Imager
- GD - Interface to Gd Graphics Library
- Image::Info - Get image informations
- Image::PNG::Libpng - Perl interface for libpng
- Graphics::TIFF - Perl wrapper for libtiff
- Image::BMP - Perl bitmap image parser and viewer

## List Manipulation

Libraries for manipulation lists (arrays)

- Array::Unique - Tie-able array that allows only unique values
- List::AllUtils - Combines List::Util, List::SomeUtils and List::UtilsBy in one bite-sized package
- List::Compare - Compare elements of two or more lists
- List::Gen - Provides functions for generating lists
- List::MoreUtils - Provide the stuff missing in List::Util
- List::SomeUtils - Provide the stuff missing in List::Util
- List::Util - A selection of general-utility list subroutines
- List::UtilsBy - higher-order list utility functions

## Logging

Libraries for generating and working with log files

- Log::Dispatch
- Log::Log4perl
- Log::Minimal

## Module Development

Libraries that simplify and improve Perl module development

- Dist::Zilla - http://dzil.org/
- Minilla - CPAN module authoring tool

## Network

Libraries that help when you are dealing with computer networks

- DOCSIS::ConfigFile - Decodes and encodes DOCSIS config files
- NetAddr::MAC - Handle MAC addresses

Libraries that help when you are working across computer networks

- Net::SSH::Perl - SSH client implemented in Perl.
- Net::SSH2 - Wrapper for libssh2.
- Net::OpenSSH - Run commands remotely using the OpenSSH client.
- Net::OpenSSH::Parallel - Run remote commands in parallel using the OpenSSH client.
- Net::SSH::Any - Run remote commands using any module or binary client available.
- Net::SFTP::Foreign - SFTP client for remote file access.
- Object::Remote - Run Perl code on remote machines.
- Net::CLI::Interact - Automates interactive programs.
- Net::Appliance::Session - Automates interaction with appliances.

## ORM

Libraries that implement Object-Relational Mapping or datamapping techniques

- DBIx::Class
- Rose::DB
- Teng

## Package Management

Libraries for package and dependency management

- App::cpanminus
- Carton
- Pinto - Powerful local CPAN repos

## Processes and Threads

Libraries for managing processes and threads

- Parallel::ForkManager - A simple parallel processing fork manager
- Parallel::Prefork - A simple prefork server framework
- Proclet - Minimalistic supervisor, a Perl port of foreman

## Profiling

Libraries for examining run-time activity of your program

- Devel::KYTProf - Very light profiler for I/Os such as HTTP request-responses and SQL queries.
- Devel::NYTProf - Code profiler.

## Protocol

Protocol clients and libraries

- Furl - Faster HTTP(S) Client
- HTTP::Tiny - Minimal and fast client. Included in the standard packages.
- LWP::UserAgent - Popular HTTP(S) Client
- Net::Curl - (libcurl)[https://curl.se/libcurl/] integration
- Net::DHCP - Send and receive DHCP packets
- Net::DNS - Resolve DNS host names
- Protocol::DBus - D-Bus in (pure) Perl

## Queueing

Message Queue, Job Queue System..

- Gearman
- Minion - Pure-Perl job queue
- Net::RabbitMQ
- Net::Stomp
- Qudo
- Resque
- TheSchwartz

## Science/Numerics

Hand-picked modules for research, science, numerics and hyper-computing

- BioPerl
- Chart::Clicker - Powerful, extensible charting
- PDL
- PDL (CPAN)
- PDL::Graphics::Gnuplot
- PDL::IO::*
- PDL::LinearAlgebra
- PDL::Stats
- Physics::*

## Stream Manipulation

Libraries for manipulating event streams

- RxPerl - Perl implementation of Reactive Extensions / rxjs

## REST Frameworks

Libraries for developing REST applications

- Catalyst::Action::REST - Automated REST Method Dispatching
- Dancer2::Plugin::REST - A plugin for writing RESTful apps with Dancer2
- Dancer::Plugin::REST - A plugin for writing RESTful apps with Dancer
- Raisin - a REST API micro framework for Perl
- Squatting - A Camping-inspired Web Microframework for Perl

## Template Engines

Libraries and tools for templating

- HTML::Template - Templates for web pages
- Template::Alloy - TT2/3, HT, HTE, Tmpl, and Velocity Engine
- Template::Toolkit - Very Popular Template Processing System
- Text::MicroTemplate - Fast, simple and safe template engine written in pure-Perl and core modules.
- Text::MicroTemplate::Extended - Extended Text::MicroTemplate.
- Text::Template - Templates with embedded perl
- Text::Xslate - Faster template engine with XS. Supports multiple syntaxes.
- Tiffany - Generic interface for template engines. It makes it easy to use multiple template engines.
- Template::Magic - Magic merger of runtime values with templates.

## Testing

Libraries for testing codebases and generating test data.

### Testing Frameworks

- Test::Base - A Data Driven Testing Framework
- Test::Base::Less - Limited version of Test::Base
- Test::BDD::Cucumber - Implementation of the popular Cucumber framework in Perl
- Test::Class - Class-based testing. Support “setup” and “teardown”.
- Test::Deep - Test deep and complex data structures with great flexibility.
- Test::Deep::Matcher
- Test::Harness - Run Perl standard test scripts with statistics
- Test::Kantan - simple, flexible, fun “Testing framework”
- Test::More

### Test Double

- Test::Exception
- Test::Fatal - Simple module for verifying exceptions.
- Test::Mock::Guard - Mocking package subroutines.
- Test::MockTime
- Test::mysqld
- Test::TCP - Launch temporary TCP Server
- Test::Time - Simple module for faking system time.

### Coverage

- Devel::Cover
- Devel::Cover::Report::Coveralls Report to Coveralls

## Tools

Some useful tools

- App::Ack - ack is a tool like grep, optimized for programmers.
- App::Nopaste - Post to various pastebins from the CLI
- Daiku - Make for Perl.
- Data::Printer - Colored pretty-print of Perl data structures and objects.
- Reply - Read-eval-print-loop(REPL) command-line tool.
- Riji - Static site generator using markdown and git mainly for blogging.
- Smart::Comments - Comments that do more than just sit there.

Libraries for developping command line applications

- Toolbox::Simple - Simplfy some common tasks in Perl.
- Script::Toolbox - Framework for the daily business scripts.
- Devel::Kit- Handy toolbox of things to ease development/debugging.

Libraries for handling configuration files

- Config::Tiny - Read/Write .ini style files with as little code as possible

## Type checking

- MooseX::Types - Moose types management tool
- Type::Tiny - Tiny, yet comprehensive type library

## Video

- FFmpeg - Interface to FFmpeg, a video converter written in C
- Video::Info - Retrieve video properties such as: height width codec fps
- Vlc::Engine - use Vlc media player with Perl
- VideoLAN::LibVLC - Perl bindings for libvlc.so
- Video::Generator - Perl class for video generation

## Web Frameworks

Libraries for developing Web applications

- Amon2
- Catalyst - Overflowing with features. Very popular.
- Dancer (Official site)
- Dancer2
- Gantry - Web application framework for mod_perl, cgi, etc.
- Kelp - Plack-focused Perl web framework
- Kossy - A Web framework with simple interface.
- Mojolicious - An all in one framework.
- Poet - a modern Perl web framework for Mason developers

### Middlewares

Libraries for creating HTTP middlewares

- Gazelle - Preforked Plack Handler for performance freaks
- Plack - PSGI server implementation and utilities for Web applications.
- Server::Starter - Process manager with the “graceful restart” feature.
- Starlet - High-performance PSGI Server
- Starman - High-performance preforking PSGI/Plack web server
- Twiggy - Event-driven PSGI application server

## Web Frameworks-Like

Somewhere between templates and full on frameworks

- Embperl - Building dynamic Websites with Perl (sort of like Perl crossed with PHP)
- Mason - Powerful, high-performance templating for the web and beyond

## Web Scraping

Libraries for extracting some information from websites

- Web::Scraper
- WWW::Mechanize
- WWW::Mechanize::PhantomJS - automate the PhantomJS browser
- WWW::Scripter - For scripting web sites that have scripts
- WWW::Selenium

## Network Security

Some great libraries for starting the world of Network security with Perl

- Net::Pcap - Interface to the pcap LBL packet capture library
- Net::Ncap - Perl binding to the ncap network data capture library
- Net::Frame - Perl framework for frame crafting
- NetPacket - assemble/disassemble network packets at the protocol level
- Net::Write - portable interface to open and send raw data to network
- Net::Analysis - Perl library for analysing network traffic
- Net::Silk - Perl’s Interface to the SiLK network flow library
- Net::Inspect - Perl library for inspection of data on various network layers
- Net::Tshark - Perl interface for Tshark network capture utility
- Net::Sharktools - Wireshark’s packet inspection capabilities in Perl
- File::PCAP - Read, Write and manipulate PCAP file format through Perl
- Net::P0f - Perl interface to p0f utility, usefull for finger-printing os
- Net::Pcap::Reassemble - Perl IP fragment reassembly for Net::Pcap
- Nagios::NRPE - Pure perl Nagios NRPE implementation
- Monitoring::Plugin - A family of perl modules to streamline writing Naemon, Nagios, Icinga or Shinken (and compatible) plugins
- Net::Connection::Sniffer - practical Perl library for MiTM connections
- Net::ARP - Library for crafting ARP packets
- SNMPMonitor - Perl extension for writing SNMP Monitors
- Net::LibNIDS - Perl interface for the Network Intrusion Detection System library
- Parse::Snort - Perl Snort rules parser
- Net::Wireless::802_11::WPA::CLI - Perl WPA_CLI interface
- IO::Socket::SSL::Intercept - library for intercepting SSL connections through Perl

## Metadata Forensics

General Metadata files parser, usefull during forensics investigations

- Image::ExifTool - General metadata parser and viewer framework

## Reverse Engineering

Libraries used for disassembly assembly operations, ELF files and bytecode

- Disassembly - Decompiles binary bytecode to readable and recompilable bytecode assembler
- Python::Bytecode - Parse Python bytecode
- B::Bytecode - Compiles a Perl script into a bytecode format that could be loaded later
- Perf::ARM - Use ARM instructions in Perl
- Asm::Z80::Table - assemble / disassemble all Z80 CPU assembly instructions with Perl
- X86::Disasm - Disassemble Intel x86 instructions with Perl
- Disassemble::X86 - Another library for disassembe X86 instructions
- X86::Udis86 - Interface for the C Udis disassembler
- Asm::X86 - List of instructions and registers of x86-compatible processors, validating and converting instructions and memory references
- ELF::Writer - write and read executable ELF files

# Other Awesome Lists

Other amazingly awesome lists can be found in:

- bayandin/awesome-awesomeness
- emijrp/awesome-awesome
- fleveque/awesome-awesomes
- sindresorhus/awesome
- t3chnoboy/awesome-awesome-awesome

# How to contribute?

Please read CONTRIBUTING.md

perl.md Github