Reviews by Jeremiah C. Foster


perl-ldap (0.44) *****

It is one thing to build a perl interface to a database or API, it is another thing to do it well. Doing it well means maintaining your module(s), writing clear documentation, being idiomatic in perl when possible, as well as other things above and beyond programming.

The LDAP::* set of modules fit the criteria of modules that are done well. The documentation is straight forward and the code works. Any idiosyncratic bits should be ascribed to the oddness of LDAP and not these modules.

Net-DBus (0.33.6) ***

Ran into a couple bugs using the very basic interface. The documentation is somewhat thin sadly. Not a lot to chose from if you want a dbus module from the CPAN, this module is one of the few which makes it all more crucial that it is in good shape, which it only partly is.

Bug fixing, code refactoring, and a general update are needed to move this module into a more usable tool.

Plagger (0.7.17) ***

While surely this is good software from a developer and even potentially a user's perspective, it is a lot to manage for the system administrator. It pulls in a lot of dependencies, much more than average, and it pulls in things that one is unlikely to use because many of the dependencies are for Asian languages and locale mangling and the like.

Code re-use is good - but having too many dependencies means you have to shave a lot of yaks just to get your software running and that is a negative.

Sys-Dev-LDAP-Populate (0.1.1)

Paucity of documentation forces me to give a mediocre rating. It does have a README at least, although a lot of it is boilerplate.

QtCore (4.004) *

Ancient module, unmaintained. Yet this is the newest module which offers Qt4 bindings on the CPAN.

Google code has some newer Qt4 bindings, still in a rather undeveloped state however.

signatures (0.06) *****

Allowing signatures, i.e. the specifics of the parameters being passed to a subroutine, is a welcome addition to perl to make it more readable. To have this functionality without using the black magic of Source Filters is even better.

Use this module, and its brother Method::Signatures, if you want cleaner, more readable code.

MooseX-Types-Path-Class (0.05) ***

A useful module to be sure, but perhaps might benefit from a clearer synopsis, an example, and a little bit more thorough documentation. It expects that you have a lot of experience with Moose and Path::Class, which is fine, but it might provide a fuller description to those who arrive here without prior knowledge of those modules. Still an early version so I am certain later versions will be more complete. :)

Regexp-Common-debian (0.1.5) *

When the synopsis largely consists of this string: #TODO, you know you are dealing with a ball of fail.

Linux-Inotify2 (1.2) ***

Documentation still needs work, although it is getting better. Lines that are confusing are lines like; "cancel this watcher: remove no further events". Does that mean,

- Remove, no further events

- Remove events that don't go further

- Remove further events

Also some of the code itself might not be considered "Modern Perl," one could replace the printf * foreach @array with a print map { } @array for example.

But all in all, thanks for doing this Marc, I'm glad to have this module on CPAN.

Search-Xapian ( ****

Requires proper documentation. Upstream Xapian documentation is also pretty spotty. If someone wanted to write an article on how to create, populate and access a Xapian database from perl, that might get published in the Perl Review.

SVG-Graph (0.02) ***

This is clearly code that holds a lot of potential. The interface is weird and the documentation is poor to non-existent.

It is a real shame that the module authors do not take better care of their work, they are obviously talented.

DataExtract-FixedWidth (0.09) *

I could bloody well careless about DataExtract-FixedWidth, I just had to post a review of Nadim's review, which was priceless.

SVGGraph (0.07) ***

Do not confuse this module with the similarly named SVG::Graph, located here:

The more complete SVG::Graph is what you will get if you download through debian or unbuntu for example if you use apt-get or aptitude - not this module!

Moose (0.61) *****

I recommend everyone to take a quick look at Moose::Unsweetened - it shows the difference between Moose OO and normal perl OO.

DBIx-SQLite-Simple (0.34)

This could be a useful module. However, it lacks all but the most rudimentary documentation. Because things like a synopsis are what most people in the perl community use to judge the usefulness of a module, this module fails the first test since it lacks even a synopsis.

Mail-MboxParser (0.55) ****

Generally a good module and with decent documentation which got me up and running pretty quickly. There is a bit of a bug in handling From headers, this bug has been in RT for two years now and in debian's BTS for about a year. It would be cool if markov could solve this small problem - then this would be an excellent module.

Regexp-Log (0.04) *****

This is a powerful base class for creating tools to parse logs. The only drawback is that it is really designed and documented for the advanced perl programmer. This in no way takes away from its usefulness but it does mean that people who want to subclass Regexp-Log ought to know what they are doing.

If you do know what you are doing, this module removes a great deal of trial and error with regular expressions and allows one to quickly create a tool to parse the log you have at hand.

IO-All (0.38) *****

Perl is a powerful programming language. This module shows just how powerful. Caveat Emptor; use this if you already are familiar with other IO modules on the CPAN, this one sort of summarizes them and collects them in one place, because it can.

If you are a an experienced perl hacker, this module will save you time and effort. If you are newbie please note that there are clearer, better documented, dare I say more standard interfaces, to Input and Output in perl.

With that said, clearly there is some serious voodoo going on here and judging by the other modules by the same author, this person is a brilliant programmer.

Test-TAP (0.03) *****

I just read the documentation and I know exactly what this module is for; I can't say that for every module on the CPAN.

This module is for validating the output of your "Test Anything Protocol" script to make sure it adheres to the currently defined specification. Note that the author says it is "experimental", but I am certain if you need to check your TAP, this module will be useful.

App-Asciio (0.95_01) *****

I saw a demo of this in Oslo, given by the author. Brilliant. If you need to create ASCII charts easily, this is the tool for you.

XML-Atom (0.28) *

This unfortunately is very poorly documented and has lots of bugs, some going back three years or so.

This is a shame because it could be a very useful module, but as it stands it is almost unusable.

Tie-Hash-Cannabinol (1.09) *****


Authen-Simple-SSH (0.1) **

This module merely changes the interface to Net::SSH::Perl, it does not extend or replace any of its functionality. It is a new module, and I am sure more work will be done, but it needs to have comensurate documentation when it hits the CPAN so one can quickly find out if this is something one wants to use - this module has nearly no documentation.

Linux-LVM (0.13) **

This module was written when lvm1 was the current version. lvm2 is now the current version and this module has problems parsing the new format from lvm2, at least under debian. See bug #460604 at

I have been in touch with Chad so hopefully there will be some movement on the bug front. Chad also says he is re-factoring the code so I look forward to his new initiative!

PS - Gunnar Wolf updated the package for debian which means that if you are using a deb of Linux-LVM your package will be up-to-date. I will forward the patch to RT for the Linux-LVM module so the fix can be incorporated. (June 2, 2008)

Module-Install (0.67) *****

Umm, wow.

First I used this as a "drop-in" replacement for MakeMaker, then I started using it on its own and I am really glad. This means that I can handle dependencies with perl, not with whatever operating system it is going to run on. If someone downloads my module from CPAN, they will be told they need Template and Carp (in my case) without having to wait for the program itself to tell them. Plus it has the cleanest syntax you could hope for.

Great tool.

PerlQt (3.008)

My concern with this module is that it is not up to date. Qt is now at version 4 and this module only covers Qt 2.0. It looks like development has ceased and this can be a problem since Qt themselves say - "The Qt 4 series is not binary compatible with the 3 series."

I think this would be a great module to develop cross-platform applications, but it has not kept up with Qt and therefor is most likely useless.

DBI (1.56) *****

I use this module whenever I need to talk to a database. It has excellent documentation, clear examples, and provides a logical interface which makes using it in everyday coding rather easy. I can say that time invested in learning this module is rewarded with an excellent tool and better code.

GDGraph (1.44) *****

This is one of those modules that delivers. It does what is says it does with a clear interface, some decent examples, and a perlish way of doing things which means if you are a beginner this is still easy to use. If you are looking for a simple way to graph some info, perhaps for a web site, or for a report, you can do a lot worse that spend a little time with this module.

CGI-Ajax (0.697) ***

I want to like CGI-Ajax, but it is hard to use. It does not have the "functional" interface available to it that has which makes it hard to integrate into legacy code. It stuffs a whole bunch of JavaScript into the header of the output page. It also has very limited examples as well as no proper mailing list. The documentation is out of date and not centralized, for example on CPAN it tells you to go to the web site, on the web site it tells you to go to Google groups. Even there at Google groups there is a limited number of people there who are using the module.

This can be a great module, it could be really useful. It needs more careful documentation and a more flexible interface.