Reviews by Tatsuhiko Miyagawa


App-perlbrew (0.03) *****

Great idea and implementation. This tool makes it really easy for you to install different versions of perl under your home directory and switch from one to another.

This makes your life as a CPAN module developer much easier when you receive bug reports or CPAN testers failure with older version of perl that you might not otherwise have in your system.

It also makes your life as a normal perl user easier if you're using systems that has perl with custom vendor patches such as Mac OS X or Fedora, in which case you might want to avoid installing modules into system lib path that might cause problems with OS software upgrades.

Test-Requires (0.03) *****

Test::Requires makes it really easy for you to add tests that requires external dependencies that your module itself doesn't need. It helps a lot to cut down the boilerplate that you might otherwise need to write in .t files using eval, plan and skip_all.

The Test::Requires module itself doesn't have any external dependencies which means you can also include it in inc/ if you really care about adding a new dependency.

HTTP-Server-Simple (0.42) *****

This is really portable, reasonably fast and easy-to-extend web server implementation in pure Perl. Because it's pure Perl and doesn't depend on any non-core libraries, it works back to perl 5.005 (with warnings::compat) it's best if you want to embed your application in the standalone HTTP server using this module.

Script-Sub-Import (0.0201) **

The way this module is implemented is considered a hack, and this module should not be used in the first place. There are many, far better ways to do the same thing, a) Check caller() in the script so the main routine won't run, b) Convert your script into a module (.pm) file and make the .pl just call methods/functions.

The only real use case I can think of is when you have bunch of legacy scripts that you cannot touch for some reason, but I assume you have to be able to do that anyway if you want to test or import functions from those scripts.

ShipIt (0.52) *****

Tired of incrementing $VERSION, running perl Makefile.PL; make; make test; make dist, git/svn tag, commit and push and then upload to CPAN? Have you released your module without new .pm files included in the tarball because you didn't update your MANIFEST and got tons of CPAN testers failure report? Forgot to update Changes file and got a complaint/question what has changed?

ShipIt takes care of all of this.

Test-TCP (0.11) *****

This is an incredibly useful module to test TCP based server program.

All you have to do is to provide two callbacks: one is server to run the server side process, which could be perl code or a different program with exec(), and the other is the client code that tests the server process. Both would be called after the successful fork() and will automatically receive the empty port as a callback argument, which makes it so handy to use.

In Plack project we heavily use this module to run an HTTP server and then sends HTTP request to the forked server and back. Very handy.

DBIx-Sharding (0.04) **

What this module does is master/slave partitioning, not database sharding.

Database Sharding is a technique to break a single database into multiple physical databases and let the application decide which database to fetch/store user's data using user_id as a key, for instance. See

Exporter-AutoClean (0.01) *****

This is an opposite approach to what namespace::autoclean does -- and it's an excellent idea. You, as an author of an utility module can tell the users of your module so the exported functions will not clobber the caller's namespace.

I now sort of wish this should replace the perl core Exporter and becomes default (with some backward compat maybe).

Devel-LeakGuard-Object (0.06) *****

Just add -MDevel::LeakTrace::Object and wrap the code you want to audit with leakguard {} and this useful module shows which package objects are leaking. Easy to use and sooo powerful to find the cause of leaking of your program (if any).

Mysql-Query-Parser (0.00001_00) *

This module uses a poor and naive regular expression to parse SQL query and is obviously fragile and fails to parse not-too-simple queries.

You might better try DBIx::MyParse (using mysql's own C code) or DBIx::MyParsePP from Philip Stoev, who is an engineer from MySQL AB, to accomplish the same thing, with more reliability.

Array-Diff (0.07) *****

To answer the 1-star review: What this modules gives over List::Compare is the simplicity. List::Compare POD gives you 1300 lines of man pages. This module does its job to get the difference of two arrays and nothing more than that. Quite well done.

Number-Phone-US (1.5) *

This module's license is not free software license (Non-commercial use only). Its implementation is actually one-line regexp and doesn't do what other Number::Phone::* implementations are supposed to do, like getting geographic info or get the category of phone line etc.

CPAN-Mini-Webserver (0.36) *****

Great work. Helps a lot to hack in an offline environment like airplane.

Test-Base (0.52) *****

Really useful distribution to write data-driven tests with.

HTML-TreeBuilder-XPath (0.06) *****

This module is really useful to extract content using XPath, even from not-well-formed HTML. Nice combination of technologies: HTML::TreeBuilder and XML::XPathEngine.

HTML-WikiConverter (0.50) *****

This module comes with a well written documentation and easy-to-use API, and the author was really quick to responde for patches and suggestions I sent. Nice work.

Class-DBI-Plugin-RetrieveFromSQL (0.02) ****

It looks like obviously a good and useful module. But the name is not just good, as it's not intuitive for what it does. I'd name it Class::DBI::Plugin::SQLPlaceholder or stuff like that.

Pod-ProjectDocs (0.12) *****

This module allows you to create a custom POD documentation page just like you have in The author is pretty responsive for patches and suggestions like including *.js files with inline POD. Nice work.