Reviews by James Wright


Jemplate (0.30)

Good module, great idea, but it is looking a little unloved amongst the author's other modules, and the website, which claims that it is generated by Jemplete, seems not to be (I viewed source for the page), and is also broken (none of the links except home work).

Mail-Box (2.109) ****

Was torn between using this and the PEP Email::* modules usually recommended for mail projects, but then I read the hilarious Moonpig slides (especially slides 24 and 26) and decided to go with this set of modules.

Cpanel-JSON-XS (2.3313)

The only possible reason to use this module over JSON::XS is if you need to target a Perl older than 5.8.5 (which JSON::XS doesn't support). The documentation is largely a copy and paste job from the JSON::XS (an incomplete job, as there are MANY places where the POD still references JSON::XS instead of Cpanel::JSON::XS), and presumably so is the code. As for JSON::XS not having a public repo, please see

Regexp-Grammars (1.030)

Let's hope that a future Perl version unbreaks what broke for this module.

String-String (0.01)

scott: @foo = qw/a b c/; my $x = join //, @foo; leaves 'a1b1c' in $x (1 being the value of // in scalar context). You probably want join '', @foo or maybe do { local $" = ''; "@foo" }; "@foo" or "@foo[1,2,4]" or "@hash{qw/key1 key2 key3/}"

Guard (1.022) *****

Useful. The Guard used by AnyEvent, so if you are using that family, this is the guard module for you.

AnyMQ (0.33) ****

Good generic message queue interface, extensible by traits beyond the default in-memory only model. Unfortunately, despite the numerous message-queue modules and bindings (for beanstalk, stomp, rabbitmq, zeromq, amqp, various hand-rolled modules) on CPAN, there are no interfaces between them and AnyMQ on the CPAN.

Mixin-Event-Dispatch (0.003) ***

Yet another one of these, as the author even acknowledges. This one seems to be here to satisfy NIH syndrome in their own modules. Use Object-Event instead.

Log-Log4perl (1.30)

There is already Log-Message in core, it is actually pretty similar in scope and functionality to Log-Log4perl (no wheels reinvented here)

Const-Fast (0.005) ***

Any reason to prefer this over Data::Lock from Attribute-Constant?

Email-Sender (0.101760) ***

This is a good module, and I use it, but in less places than I'd like, since the Moose dependency makes it a bit too heavy.

Mail-Decency (0.1.5)

Gee, Nigel, 1-star review much? A reading of the description would tell you about the Postfix requirement, and there are many modules on the CPAN that are less universally useful than their name would suggest. This module has other issues, like unspecified, required dependencies (f.e., Geo::IP), which might be worth mentioning instead bearing in mind, though, that it is still an alpha release. As to the author's rationale, that 'there is no single (open source) application that combines both ' ... policy and content filtering .. 'that i know of.', I believe qpsmtpd (used by, at least, and fits that bill (though it is not on the CPAN).

No rating since I won't be using or installing this module.

Dancer-Plugin-SiteMap (0.01) ****

Looks like a nice module, pity about the 5.10.0 requirement (which seems unnecessary since removing the 'use 5.0100' line lets both a syntax check and the tests pass successfully).

Also, it seems fully functional on (at least) 5.8.9 with that line removed from

CGI-Application-Plugin-DBH (4.00) ****

I use this module in most of my data driven CGI Apps, it is obviously most useful in mod_perl and FastCGI, but I tend to use it in plain CGI too. Especially useful are the use of instance parameters, set outside the CGI::App classes, to instantiate the DBI object.

CGI-Application-Plugin-CAPTCHA (0.01) ***

While I like the interface to this module and it integrates well enough with my templates, I have had to stop using it as no options I have tried combined to make readable CAPTCHAs and ones that an spammer can't eventually detect. I switched to using Captcha::reCAPTCHA which, while not having a CGI::Application interface, is easy enough to use in my CGI Apps.

CGI-Application-Plugin-AutoRunmode (0.16) ****

While I like the idea of this module and have used it a few times (and I've never had problems with using it in mod_perl as Mark Stosberg described), it does seem a little fragile and a bit easier to break than it should.

CGI-Application-Server (0.061) *****

The documentation is very sparse, but this is a good module despite that, once you set up your table it stays out of your way, doing less 'clever' things like CGI::Application::Dispatch::Server does, and since most of my deployments are to mod_perl + CGI::Application::Dispatch, this is perfect for my development as it supports passing paths to CGI::Application, CGI::Application::Dispatch or to the file system. The documentation uses 'basic' almost as a negative, but to me, the basicness of the module is exactly what I need.

CGI-Application (4.31) *****

I can't recommend this module higher, it has just the right mix of high and low level capabilities to appeal as a powerful advance over and a light, nimble alternative to heavyweight frameworks such as Catalyst. It also boasts a number of excellent plugins to make it easier in specific cases. The runmode concept is awesome and really provides all you need in terms of dispatch (though I do use CGI::Application::Dispatch 98% of the time with this, it doesn't take anything away from cgi-app). The quick startup time and low memory footprint compared to some other frameworks make it work for me in situations where others just can't go. The direct access to the CGI object is also a plus.

The documentation is also excellent.

CGI-Application-Dispatch-Server (0.52) ****

This module is quite easy to use and I used to use it a lot, but it does seem to do too much when it comes to handling errors and error modes, so I switched to CGI::Application::Server which lets me use paths with CGI::Application and CGI::Application::Dispatch, as well as multiple static paths at the cost of a little more configuration.

CGI-Application-Dispatch (2.16) *****

I use this module very often, it provides easy local development (combined with CGI::Application::Server) and installation under mod_perl as it provides a mod_perl handler interface, and as a user, it can be easily used with FastCCGI, or as a regular CGI script. My only complaints are that CGI::Application::Dispatch and CGI::Application::Dispatch::Regex can't be easily combined in the same package, and that CGI::Application::Dispatch::Regex hasn't been updated to support named regex captures, which would remove the need for the names parameter in the dispatch table (at least for Perl 5.10).