Reviews by John McNamara



M (1) *

We heard this joke already. It was called Nothing::Tiny.

Wasn't funny then either.

Spreadsheet-WriteExcel-Styler (1.00) *****

Dealing with formats/styles in Spreadsheet::WriteExcel is probably a little harder than it should be and this module removes some of the pain.

It encapsulates functionality that I had wanted to add to Spreadsheet::WriteExcel but never got around to. It also does it in a sane and easy to use manner.


Devel-SimpleTrace (0.08) *****

This is really useful for tracking down the cause of exceptions.

I use it all the time with failing test cases.

Log-Log4perl (1.30)

Side rant: Cpanratings *really* needs a comments option.

Anyway, in relation to the previous review. I think the main point of Log::Log4perl is that it is similar to Log4j which many people are familiar with from Java.

In that respect it is different from Log::Message.

Also, the initial version of Log::Log4perl is from June 2002 which predates Log::Message by about a year.

And finally, Log::Message is only core since Perl 5.9.5, circa July 2007.

App-PodPreview (0.001) ****


To get style previews put the following in the ~/.podpreview file:


Test-Differences (0.500) *****

A excellent module for debugging failing tests with complex data structures.

In case you haven't seen the Test::Differences output have a look at the examples in the docs.

This module is a genuine time saver.

EBook-EPUB (0.5)

An excellent module for creating ePub eBooks.

All the ePub features that I required were covered.

Alien-SVN (

Very painful to install on Solaris despite that fact that it is an Alien:: distro. The current overall fail rate in cpan.testers is about 66%.

It would be better if it checked to see if Subversion was already installed and used the installed libs instead.

XLSperl (0.7) *****

An excellent idea and implementation.

XLSperl basically allows you to process a binary Excel file as if it was a text file using standard Perl syntax. For example you can do things like the following:

XLSperl -lne 'print if /foo/ and $COL eq "C"' file.xls

Very cool.


excel2txt (0.04) *****

An excellent implementation of an excel2xxx filter program using Spreadsheet::ParseExcel.

This is the way Spreadsheet::ParseExcel programs should be written.


Spreadsheet-WriteExcel-Worksheet-SheetProtection (0.03) *****

This is a nice extension to Spreadsheet::WriteExcel which saved me time by allowing me not to have to write it. :-)

Well done.


Pod-Simple (3.07) ****

Pod::Simple is a very rigourous Pod parser and it provides several different styles of interface such as event/method driven or pull parser.

I used Pod::Simple to create Pod::Simple::Wiki. It was very easy to subclass into something useful with very little coding.

(There is a tutorial on sub-classing in Pod::Simple::Subclassing).

It can be a little tricky to debug and the internals are best avoided but thankfully that isn't something that is required very often.

An excellent framework for pod2whatever converters.

[In reply to BKB's review]

"The HTML created by the module is incredibly ugly".

It *is* a little unadorned but Pod::Simple is mainly intended as a framework for Pod converters rather than as a definitive pod2html converter. The actual appearance of the Html output can be modified by adding a css stylesheet, (example below).

In your review of Pod::HtmlEasy you said:

"The HTML output looks like CPAN's which is a big benefit compared to the ugly one produced by POD::Simple::HTML".

The output is actually produced using Pod::Simple::HTML. If you link to or copy their css stylesheet you will get Html documents that look the same. See the following for an example filter program:


Devel-ArgNames (0.03) *****

I was unaware of this module until I saw the previous review. This module is incredibly useful when you need to debug a long list of arguments. For example:

#!/usr/bin/perl -w

use strict;

use Devel::ArgNames;

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();

print_args($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);

sub print_args {

my @args = arg_names();

my @values = @_;

for my $i (0 .. @args - 1) {

printf "%-10s = %s\n", $args[$i], $values[$i];





$sec = 25

$min = 43

$hour = 22

$mday = 7

$mon = 4

$year = 108

$wday = 4

$yday = 128

$isdst = 1

Nothing-Tiny (1) *

Jonathan T. Rockway wrote: "my coworkers and I all had a good laugh afterwards".

Well done then.

o2sms (3.24) *****


Does exactly what I need.

Now I actually use some of my free monthly web-texts.

CPAN (1.83) *****

Almost perfect for installing CPAN modules.

The existence of other tools for installing and maintaining modules suggests that not everyone would agree but this has always worked for me.

Spreadsheet-ParseExcel (0.2603) *****

A very useful module and the representation of a large amount of work by the author.

In relation to some of the other reviews, there are ways to increase the efficiency of the module. See:

Win32-GuiTest (1.50.2-ad) *****

This is an extremely useful module for automating tasks on Windows. Especially for programs that don't support OLE/COM.

OLE-Storage_Lite (0.13) *****

My name is on this module but I am a maintainer and not the author.

That credit goes to Takanori Kawai.

OLE::Storage_Lite is an extremely useful module although it is rarely used directly by anyone. However, it forms a core part of Spreadsheet::ParseExcel and Spreadsheet::WriteExcel which I believe are used by quite a few people. :-)

It also represents a significant recreation of a difficult file format with virtually no background information.

There are probably only a handful of people who can really appreciate the work involved in this module and its ultimate utility. But I am one of those people. So thanks Takanori Kawai.

PodParser (1.28) *****

I would give this package maximum results just for Pod::Usage but it also has Pod::Select and Pod::Checker.

For parsing I prefer Pod::Simple to Pod::Parser but for personal more than technical reasons.

Perl-Tidy (20031021) *****

Perltidy is an excellent utility for indenting and reformatting Perl source code. It can also convert code to html with syntax highlighting.


Perltidy is well conceived and well implemented and this module provides a useful interface to it.

Parse-RecDescent-FAQ (3.3) ****

This is a very useful resource.

However, it would be nice if the Changes file was updated so that it was clear what new information was being added with each release.

Spreadsheet-WriteExcel-FromXML (1.00) ****

This is a very clever idea.

The module uses a DTD to define a simple XML format that can be converted to an Excel file using Spreadsheet::WriteExcel as a backend.

This is a potentially powerful approach since it effectively decouples your data from Perl, apart from a single filter program, and allows you to create Excel files using your preferred XML tools.

Requires Spreadsheet::WriteExcel version 0.42.

CGI-Kwiki (0.18) ****

I recently installed Kwiki, C2Wiki and Usemod. CGI::Kwiki was by far the easiest to install. It also looks great.

I highly recommend it to anyone who wants to set up a hassle free wiki.

Since it doesn't use a database it may not scale well for large on-line wikis. There are also some markup elements missing that other wiki's support such as term lists and definition lists. However, these issues are probably minor for most people.

DBI (1.37) ****

A great module.