Reviews by Ævar Arnfjörð Bjarmason


Text-EditTranscript (0.07) *****

Does what it says on the box, and isn't full of fail unlike Text::Levenshtein and Text::LevenshteinXS.

Git-Repository (1.17) *****

Makes it really easy to use Git from a Perl program, Git::Repository::Log is especially helpful, you can get all of Git's log information in a Perl datastructure instead of parsing it out yourself.

Mouse (0.51) *****

Mouse is excellent. I've switched to using it from Moose because it gives you all the Moose sugar without the startup / memory penalty rightly associated with Moose applications.

It doesn't support all of Moose's features but I've found that it supports the subset of Moose that I care about.

I've written two blog posts about Mouse that I think are helpful further reading:

Converting a Moose application to a Mouse|Moose hybrid - how you can easily support both Moose and Mouse via Any::Moose:

Removing Moose and the case for Mouse - Why I use Mouse instead of Moose:

Dist-Zilla (1.100711) ****

If you use this module you'll probably run into quaint bugs or odd edge cases. You might also find that the documentation is lacking. All of this is being rapidly improved, especially with Ricardo's current grant work.

Despite those hurdles Dist::Zilla is worth it. If you configure it correctly (like I've done with Dist::Zilla::PluginBundle::AVAR) all the manual labor that goes into making a release can be managed by Dist::Zilla.

You'll never have to make sure to bump all your $VERSION variables, generate a README from your POD or tag the release Git & commit it afterwards. If you don't like the default behavior or would like something new then it's probably trivial to write a plugin that does what you want.

Before Dist::Zilla making releases was an error-prone and manual process. Now I just do `dzil test && dzil release' and it does everything I need it to.

App-cpanminus (0.9916) *****

cpanminus fetches, tests and installs modules in the time it takes for CPAN or CPANPLUS to wonder whether they should update their index today or not.

The module is young but promising; I suggest the author do more drugs.

Devel-NYTProf (3.01) *****

Really easy to use, and the HTML output is awesome.

MooseX-Method-Signatures (0.29) ***

This is a neat module, but after converting some code that made heavy use of method calls to it the runtime went from 12s to 50s. See my blog posting on the matter for further info:

I like the nice Perl 6-like syntax modules like this one provides, but the performance hit is too great for me to use it for anything serious in the future.

MP3-PodcastFetch (1.04) ****

I'd been using BashPodder ( but needed something with more features. Using with a simple configuration file & running it in cron works perfectly.

Git-Megapull (0.092560) *****

Works exactly as advertised and is trivial to set up. Saved me from writing my own ad-hock megapull script.

Tie-Hash-Cannabinol (1.09)

I forgot what I was going to say.

Test.php (0.12)

Andy provided patches to implement is_deeply() as well as support for TODO tests and some other things I'm probably forgetting. It's pretty much feature complete thanks to him.

As for making it into something like Test::Builder/Test::More I'd rather keep at least this distribution in its current form where it's enough to just drop one file into a PHP project to have TAP testing. It might be good to fork it into something more modular for another audience. Additional assertions can be implemented currently by calling _proclaim() directly in a custom function, although that's not documented.

BitTorrent (V0.02) *

Probably the worst CPAN module I've ever seen. The only function it currently implements is a simple wrapper around a PHP script shipped with the distribution which the user is expected to drop in /var/lib/perl. This is both redundant to existing BitTorrent modules and has no place in the top level namespace, or on CPAN at all.

pip (0.08) *****

Totally Awesome. I was looking for something that would simply allow me to do what C<cpan -i My-Package-0.01.tar.gz> doesn't. I.e. to install a given CPAN-style (Makefile.PL and all) package as if it came from CPAN, without actually putting it on CPAN.

I began by looking at the and code and found that the workflow of those modules makes it really hard to inject a .tar.gz package into the system, I then set up my own CPAN mirror with CPAN::Mini::Inject which was unstable, slow and generally supreme overkill when all you want to do is install a package from the command line.

Anyway, this rocks, and it does other neat stuff too!

Net-DNS-Check (0.45) ****

A decent module that's decently documented. One issue I have with it is that if you want to write a custom Net::DNS::Check::Test::my_test module and have it use it you have to mess around with Net::DNS::Check::Config's internal datastructures. I.e. $conf->test_list( [ qw< my_test > ] ); $conf->{ test_configured }->{ my_test } = 'E'. If you don't do this it'll silently miss your custom test.

EasyTool (1.0.4) *

A buggy duplicate of a dozen modules.