The best of what's new on CPAN 2014

2014 has come and gone, which means that we’ve completed 12 editions of “What’s New on CPAN”. This seems like an appropriate moment to take stock and reflect on the past year of new CPAN uploads. I’ve compiled a shortlist of modules by using the scientific approach of “stuff that I remember”. Have a think about what would be on your “best of” list, and maybe let the author know, or better, write about it and let the World know.

Config & DevOps

Ingy and David’s grant work on the next generation of Inline generated a lot of excitement. But along with re-furbishing the whole Inline ecosystem, a number of side-effect modules were created too. One of those is Devel::PerlLog which simply logs a configurable message every time a Perl process starts.

C-related Perl libraries got a big boost in 2014. Asides from Ingy’s refreshed Inline::C, Graham Ollis has been working and presenting on another XS alternative: FFI. FFI::CheckLib will check that a particular C library is available as well as FFI::TinyCC, a compiler interface.

Module::Loader is a nifty way of loading plugins at runtime.


Hash::Ordered was a best-in-class implementation of an ordered hash class by David Golden. He also gave an in-depth talk of the trade offs of the solution and the alternatives on CPAN (slides here).

Did you know that File::Slurp can have issues with the Perl encoding layer? (among other issues). Leon Timmermans wrote File::Slurper as a better alternative.

Ah Sereal, the super-fast seralizer software. SerealX::Store was an attempt to create a storable-like interface over Sereal, except tastier. XML::Dataset implements a simple DSL for extracting data from XML/XHTML documents.


DBIx::Raw provides both low level SQL control and time-saving abstractions to fill a niche role for DB access. Divine the database datatype of a scalar using SQL::Type::Guess


Remember the big debate about Perl 5’s version numbering? Whilst some tirelessly debating the topic, others were hard at work at real solutions™. This is Acme::Futuristic::Perl.

Speaking of real solutions™, check out bare which removes the need to use sigils for scalars. Finally, the last barrier to mass adoption of Perl has been solved!


CPAN advanced more in hardware-related modules than perhaps any other area. YAPC NA 2014 was awash with drones. This really does seem like a promising area for Perl to lay claim. Several modules stand out in particular. Let’s start with the shiny: Timm Murray’s UAV::Pilot::ARDrone and UAV::Pilot::WumpusRover enables WiFi remote control (with video) of drones! Timm’s Device::WebIO provides a standardized interface for accessing many devices with drivers available for Raspberry Pi and Arduino among others.

Another significant development was Paul Evan’s Device::BusPirate, for the Bus Pirate hardware tool. Finally, check out VIC, Vikas Kumar’s amazing DSL for PIC micro-controllers.

Presenting Software

Pretend you’re a command line wizard with App::Cleo, which will playback a list of commands from a file for airtight demos. No more typos!

App::revealup enables markdown driven presentations with Reveal.js, by implementing a mini HTTP server. I wrote about it (twice) and use it all the time, highly recommended.


There was a tonne of new testing stuff this year, but not much stuck with me. One module that did was Test::RequiresInternet. Import this module with use and it will skip over the unit tests in your test file unless an active internet connection is found. Very handy!

Not exactly testing related, but surely useful for debugging, Regexp::Lexer tokenizes regexes, which is just cool.


Masahiro Nagano created Gazelle, a highly optimized pre-forking Plack handler with Nginx-like performance. Incredible stuff!

2014 also brought the usual flood of plugins for the major web frameworks. Big news for Mojo fans was the announcement of the platform moving away from MongoDB support and embracing a Postgres backend instead with Mojo::Pg.

Web scrapers and QA testers did well: WWW::Mechanize::PhantomJS implements a headless, JavaScript enabled browser with the typical friendly mechanize interface. Selenium::Screenshot combines Selenium’s screenshot ability with Image::Compare to detect changes in web pages.

This article was originally posted on


David Farrell

David is a professional programmer who regularly tweets and blogs about code and the art of programming.

Browse their articles


Something wrong with this article? Help us out by opening an issue or pull request on GitHub