Skip to content

thibaultduponchelle/perlres

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Language Perl PullRequestClub

perlres

List of resources about Perl 🐪

Perl 5 raptor

Perl 5 raptor from kraih, licence CC-BY-SA 4.0

📋 Summary

Derived from LinuxFR french article Pour tout savoir du Perl post-moderne.

As a reminder, Perl is a general-purpose programming language created in 1987 by Larry Wall.
Perl officially stands for Practical Extraction and Report Language, except when it doesn't
whereas unofficially for Pathologically Eclectic Rubbish Lister.
Nicknamed "the Swiss Army chainsaw of scripting languages".

"Perl continues to flourish into its fourth decade thanks to a vibrant community of users and developers" (dixit perldelta)

Perl is distributed under a dual licence : Artistic Licence and GPL v1+. Most of CPAN modules follow the same rule.


👷 Perl core development

👔 Official

⚒️ Distributions, modules and installers

🐪 General

⛽ Around the CPAN

🍻 Social

Community

(See also Perl Mongers)

Newsfeeds

Blogging

Conferences

📖 Official documentation

Perl regex

🇺🇸 Tutorials

🇫🇷 Tutorials in French

🇪🇸 Tutorials and related resources in Spanish

📳 Interactive tutorials

  • 🍕Perltuts - Learn modern Perl any time and from everywhere 💜
  • 🍟 Learn Perl - Free interactive Perl tutorial 💙
  • 🍫 TryPerl - TryRuby clone for Perl ❤️ (github)

🏫 Tutorials meta-site

📇 Perl features by version

:trollface: Perl folklore

  • 💣 "Perl" vs "perl" - Perl is the language, perl is the interpreter, PERL is how you catch newbies 👶
  • :neckbeard: JAPH - Just Another Perl Hacker
  • 🌠 PerlSecret - Secret operators and their nice nicknames
  • $A++ - More than three hundred ways to increment $A, by the Paris Perl Mongers

  • 🐪 Larry Wall Homepage - Prepare your eyes
  • 💎 Pearl of great price - The biblical reference that inspired Larry Wall to name Perl

🎃 Perl Ecosystem

  • CPAN - It is commonly accepted that the Perl killer app is CPAN ("CPAN is the language, Perl is just the syntax" - Audrey Tang)
  • 💊 MetaCPAN - Search the CPAN (twitter)

News and forums engines

CMS

Blogging

Mailing lists engines

Email filtering

Communication

Monitoring

  • 📈 Munin - Supervision software (like Nagios and Shinken)
  • 📉 Monitorix - Lightweight system monitoring tool
  • 📊 MRTG - Monitoring traffic load on network links (github)
  • 📉 Webmin - Web interface to administer Unix like machines
  • 🔍 Open Smart - Network and application monitoring
  • 📉 Loggerithim - Monitoring and remote management package
  • 📊 OPS View - Network and application monitoring
  • Net Disco - Network management tool
  • 🚬 SmokePing - Monitor network latency (github)
  • 📼 Stormons - Monitoring and mapping SAN storage devices.
  • 📈 Proclet - Minimalist supervisor
  • 🔋 Rainbarf - Fancy resource usage charts
  • Thruk - Multi-backends web interface for monitoring (github)
  • 📈 Mailgraph - Mail statistics graphs (github)

Logs analyzers

Job queues

  • 🐙 Minion - A high performance job queue
  • 👷 Gearman - Job server
  • 🚟 Qudo - Job queue manager
  • 🚞 Resque - Job queue manager
  • 🚡 TheSchwartz - Job queue manager
  • 📡 Helios - Distributed job processing and application framework

Tickets trackers

Wiki

E-Commerce

Backup tools

  • 💾 RSnapshot - Backup utility based on rsync
  • 💽 ABT - Another Backup tool
  • 💿 Backup PC - Backup tool

Games

Web application frameworks

  • ☁️ Mojolicious - Web framework created by Sebastian Riedel (CPAN profile)
  • 💫 Catalyst - Web framework
  • 💃 Dancer - Minimalist Web framework created by Alexis Sukrieh (see Dancer 1 and Dancer 2)
  • 🐊 Jifty - Web framework
  • ☁️ Cyclone 3 - Web application framework
  • 🐍 Amon - Web application framework (github)
  • 🐑 Poet - Web application framework
  • 🐘 Gantry - Web application framework
  • 🐦 Kossy - Simple web application framework
  • 🐼 Squatting - Web microframework
  • 🐺 Tatsumaki - Non-blocking web framework based on Plack and AnyEvent
  • 🍇 Raisin - REST API micro framework
  • 🐋 Maypole - MVC web application framework
  • 🐬 Angelos - Web application framework
  • 🐟 Web::Simple - Simple web application framework
  • 🐏 Ark - Lightweight Catalyst-ish web application framework
  • 🐯 Shenker - Web application framework
  • 🐂 Noe - Web application framework
  • 🐆 Kamui - Web application framework based on Plack
  • 🐌 Web Nano - Really minimalistic web framework
  • 🐁 RapidApp - Web toolkit and framework based on Catalyst (github)
  • ❄️ Kelp - A web framework light (github)
  • 😇 Marquee - Yet another Mojo based web framework
  • 🐷 Piggly - A straight forward PSGI web framework
  • 🐛 PEF::Front - A web framework
  • 🤖 Web::Machine - A RESTful web framework modeled as a state machine
  • 🔥 Combust - A web framework
  • 🌱 Pepper - Not a framework. A quick-start kit for learning and creating microservices

PSGI adapters and web servers

  • 🐷 Plack - PSGI toolkit and server adapter
  • 🐗 HTTP::Server::Simple - Simple standalone HTTP daemon
  • 🐯 HTTP::Daemon - Simple http server class
  • 🐰 HTTP::Tiny - Minimalist HTTP client
  • 🐶 Continuity - Library to simplify web applications (including a web server)
  • 🐭 Starman - High-performance preforking PSGI server
  • 🐱 Twiggy - AnyEvent HTTP server for PSGI
  • 🐻 Starlet - Simple and high-performance PSGI server
  • 🐸 Corona - Asynchronous PSGI server
  • 🐎 Gazelle - Preforked Plack handler for performance freaks
  • 🐴 Arriba - PSGI server with SPDY support
  • 🐹 Perlbal - HTTP load balancer
  • 🐂 HTTP::Engine - Web server
  • 🐕 Feersum - PSGI engine based on EV/libev
  • 👹 Server::Starter - Super Daemon to handle hot deployment of server programs
  • 🐁 Starlight - PSGI/Plack HTTP server with pre-forks

Templating

Compiler and alternative interpreters

  • 🔧 Compiler Perlito - Perl to Java and Perl to JavaScript
  • 💪 RPerl - Restricted Perl, an optimizing compiler (github)
  • 🔧 CPerl - Alternative Perl interpreter
  • 🔨 TinyPerl - Very compact Perl binary to be shipped with your scripts
  • 💸 StaticPerl - Helper script to create self contained statically linked Perl binary + script
  • 🔧 Compiler PerlC - Perl to C compiler
  • 🐪 Relocatable Perl - Patched Perl binary to make it relocatable
  • 👷 Perl Build - A Perl builder
  • 🔨 Perl Cross - Configure and cross-compile perl
  • 🔧 Stableperl - Perl fork aiming for stability
  • 👜 APPerl - Actually Portable Perl - run cross-platform with the same standalone binary with perl modules packed inside of it (github, metacpan)

Perl Application Bundlers / Packagers

  • 🎁 PAR::Packer - Generate standalone executables from Perl programs
  • 💰 PerlApp - Convert Perl program into a standalone application (commercial : part of ActiveState Perl Dev Kit)
  • 💵 Perl2Exe - Convert Perl scripts to executable file (commercial)
  • 🔩 App::FatPacker - Pack your dependencies onto your script file
  • ✨ Use PAR::Packer, Mojolicious, and Mojolicious::Plugin::Loco to create self-contained "web" application that runs locally, and uses web browser for GUI.
  • 🎁 PPM - Perl Package Manager

Assets management

Git

Database tooling

  • 💽 MySQL Tuner - MySQL configuration and tuning
  • 💿 Sqitch - Database change management application
  • 📼 ETL - Data migration helper
  • 📀 QDepo - Graphical software to convert various DB data to various office formats
  • 💾 Bucardo - Master/slave Postgres replication

IDE

Continuous Integration

Desktop Applications

Desktop Applications Development

  • 🍆 GUIDeFATE - Design GUI in ASCII art
  • 🅿️ Prima - Multi-platform GUI toolkit in C and Perl, includes a visual builder and a graphic POD viewer (github, metacpan)
  • IUP - Interface to IUP multi-platform GUI toolkit
  • 🐾 Perl Executing Browser - HTML interface for Perl desktop applications. Inspired by Electron

Tooling for Devs

  • 👴 GNU Automake - Automatically generates Makefile.in files
  • 🔍 Cloc - Count line of code
  • 🔧 Devel::hdb - Another Perl debugger
  • 🎉 Diff So Fancy - The best-lookin' diffs
  • 👀 App::sdif - cdif (word context diff), sdif (side-by-side diff) and watchdiff (repeat command and watch differences) (github, metacpan)
  • 🔥 Flame Graphs - Profiled code visualization
  • 🌈 Markdown - Markdown was initially created by John Gruber and Aaron Schwartz and implemented in Perl (git)
  • 🏊 Swim - rich, consistent, extensible markup language and framework in PEG topdown grammar
  • 💲 Pegex - combine Parsing Expression Grammars (PEG) with Regular Expressions (Regex)
  • 🔧 Daiku - Kind of make
  • 🔢 PDL - For scientific calculations
  • 👜 Fink Project - Tool to help porting software from UNIX like to macOS
  • 🔄 Reply - Perl REPL
  • 😼 Ack - Grep replacement, optimized for developers (ack 1, ack 2 and ack 3)
  • 📝 POD Web View - Edit POD file with live preview (github)
  • 🏁 GNU Parallel - Shell tool to execute commands in parallel (github)
  • 📺 Hl - PCRE-based highlighter for terminal
  • ✂️ Vnlog - A toolkit for manipulating tabular ASCII data
  • 📈 st - Simple statistics from the command line
  • 🐚 p - Steroids for your perl one-liners
  • 💫 pl - One-Liner Magic Wand
  • 📊 language-benchmarks - A simple benchmark for compiled and interpreted languages

Sysadmin

  • 🐕 Rex - A framework to simplify system administration and datacenter automation (github)
  • 🚀 Proxmox VE - A virtualization and LXC platform
  • 💽 CloneZilla - Partition and disk imaging/cloning program
  • 📡 Zevenet - Load balancer (github)
  • ♻️ Virtualmin - Hosting and website control panel
  • 💊 Pinto - Create local CPAN repositories
  • 🔍 Inxi - Print system informations (github)
  • 🔞 Web Sorrow - Security scanner
  • 👪 LemonLDAP::NG - WebSSO, Access Management and Identity Federation
  • :suspect: PacketFence - Network access control (NAC) solution (github)
  • 🐙 Plain VM - Controle multiple VMs
  • 🛄 Urpmi - Package manager
  • 🎒 Trizen - Lightweight AUR Package Manager
  • 📧 Ashafix - Postfixadmin port in Perl
  • ↪️ Shorewall - Gateway/firewall configuration tool
  • 🔧 NicTool - A DNS management solution (github)
  • 🔒 Ferm - A frontend for iptables
  • 🃏 SQLFairy - Convert SQL statements to graphs (github)
  • 💻 RemoteBox - VirtualBox Client with Remote Management
  • 🔫 Nipe - Script to make Tor network your default gateway
  • 🤖 Nikto - Webservers security scanner
  • 💽 ZnapZend - Backup ZFS with remote capabilities
  • NTPPool - Virtual cluster of timeservers (github)
  • 🔌 PerlPowerTools - Unix toolbox in pure Perl (github, metacpan)
  • Ⓜ️ MoreUtils - a collection of unix tools that nobody thought to write long ago when unix was young. 6 out of 15 are in Perl (git://git.joeyh.name/moreutils)
  • 🔣 uni - command-line utility to find or display Unicode characters (metacpan)

Hosting

  • ☁️ cPanel - Hosting platform
  • 📡 Perloku - Deploy Perl apps on Heroku

Vanity

  • 🐮 Cowsay - The cow that can speak
  • 🐠 Asciiquarium - An aquarium in your terminal
  • 😺 nyan - Your very own animated terminal Nyancat!

Uncategorized

Other Perl lists

👻 Execute Perl online

💥 Execute Perl online (sites not dedicated to Perl)

🐻 Lint Perl online

📚 Books

Other books 🇯🇵

  • 📗 Essence of Perl Text Processing (2021)
  • 📘 Perl programming poisoning 🇯🇵 (2004)
  • 📙 Perl programming for CGI and text processing 🇯🇵 (2001)
  • 📙 Introduction to Perl 🇯🇵 (1994)
  • 📘 Welcome to Perl Country 🇯🇵 (1993)
  • 📘 Perl Writing Methods 🇯🇵 (1993)

Other books 🇫🇷

  • 📗 Les fondamentaux du langage Perl 5 : Apprentissage par la pratique (Philippe Banquet) 🇫🇷 (2013)
  • 📘 Perl moderne 🇫🇷 (2012)
  • 📙 Apprenez a programmer en Perl (Open Classroom) 🇫🇷 (2012)
  • 📙 Perl pour l’impatient 🇫🇷 (2005)
  • 📗 De Perl a Java : Programmation des expressions regulieres 🇫🇷 (2004)
  • 📙 Perl 5 (Cyril Vincent) 🇫🇷 (2002)
  • 📗 Visuel Pro Perl 🇫🇷 (2001)
  • 📘 Perl 5 (Clinto Pierce) 🇫🇷 (2001)
  • 📙 Perl 5 (David Till) 🇫🇷 (2000)
  • 📘 Perl mini-reference 🇫🇷 (2000)
  • 📗 L'intro Perl 5 🇫🇷 (2000)

🚀 Develop with Perl

⬇️ Install CPAN modules

The modern way is to use cpanm (cpanminus). The tool is able to get the requested module and resolve dependencies. For instance, to install the excellent module XML::LibXML from Shlomif which is a wrapper of libxml2, we can do sudo cpanm XML::LibXML, that produces the following output (truncated) :

--> Working on XML::LibXML
Fetching http://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0201.tar.gz ... OK
==> Found dependencies: Alien::Libxml2
--> Working on Alien::Libxml2
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/Alien-Libxml2-0.09.tar.gz ... OK
[...]
Building and testing Alien-Libxml2-0.09 ... OK
Successfully installed Alien-Libxml2-0.09
Configuring XML-LibXML-2.0201 ... OK
Building and testing XML-LibXML-2.0201 ... OK
Successfully installed XML-LibXML-2.0201 (upgraded from 2.0128)
13 distributions installed

Reinstalling a set of CPAN modules can be done simply by launching a bunch of cpanm commands or by specifying dependencies in a cpanfile (and using then carton or cpanm --installdeps . for the setup).

✔️ Linters

Executable by hand or directly integrated in your scripts, IDE or editors (vim users : ale or syntastic).

  • perl -c, to check the syntax. Be careful that it does more than only checking syntax, it actually executes the blocks BEGIN and END (compilation step). This design is the reason why the default linter used by the plugin vim ale is no longer perl -c (nor even perl -w). The syntax checking in Perl is great (as well as the error messages from the interpreter... I ❤️ Perl)

  • Perl::Critic, that criticizes your coding style but do not check syntax. For instance, the file bad.pl contains :

use strict;
print "toto" }{

And perl -c bad.pl prints :

Unmatched right curly bracket at bad.pl line 3, at end of line
syntax error at bad.pl line 3, near ""toto" }"
Missing right curly or square bracket at bad.pl line 3, at end of line
bad.pl had compilation errors.

But perlcritic bad.pl tells us that everything is fine bad.pl source OK (but is not happy with the missing use strict).

  • A module that was part of the core distribution of Perl but was finally removed in Perl 5.19 : B::Lint. While we are here, how to know the history of a module in the core distribution ? Use corelist ! corelist B::Lint that gives us :
Data for 2017-09-22
B::Lint was first released with perl 5.005, deprecated (will be CPAN-only) in v5.17.9 and removed from v5.19.0

If a module goes out of core distribution it's not dramatic as it continues to be available in CPAN of course.

  • And Perl::Lint that focuses on speed while being compatible with Perl::Critic.

⚒️ How to compile perl

See how to compile perl

Actually it will give this :

wget https://www.cpan.org/src/5.0/perl-5.30.0.tar.gz
tar -xzf perl-5.30.0.tar.gz
cd perl-5.30.0
./Configure -des -Dprefix=$HOME/localperl
make
make test
make install

💊 Compile modules

If we decide to use or not a module like cpanm, at the end the module is compiled using ExtUtils::MakeMaker or Module::Build. ExtUtils::MakeMaker is a core module, while Module::Build was added then removed (5.9 → 5.19). David Golden explains in a blog post why he requested to remove Module::Build.

ExtUtils::MakeMaker

The module ExtUtils::MakeMaker generate a Makefile from Makefile.PL :

perl Makefile.PL
make
make install

Module::Build

The module Module::Build serves the same goal but generates a file Build from the file BUILD.PL :

perl Build.PL
./Build
./Build test
./Build install

🎧 How to contribute ?

Please read CONTRIBUTING.md

🙇 Contributors

Thank you to all the fantastic contributors 💗