Reviews by Curtis "Ovid" Poe


Test-Class (0.22) *****

I can't say enough good things about this module. Inherited tests, loading all of your classes once and only once (a nice little performance boost compared to multiple .t tests) and great documentation.

Also, if you have a large object-oriented hierarchy of code, Test::Class does an excellent job of allowing your test organization to match your code organization. No more staring at a long list of .t files and wondering which one has the code you want to test. Just check the corresponding test class for the code you're concerned about.

CGI-Builder (1.36) *

Hmm, lots of five star reviews? Seems plenty of folks are quite happy with this module. But wait, what's that I see? Those folks are giving out glowing reviews to other modules, too. And as of this writing, those modules all belong to same author ( Basically, various "people" are all showing up to say how wonderful Domizio Demichelis is. How curious.

You can also read a bit about the history of this module ( and how he used to have this module "phone home" and then eval unknown code on your computer ( Personally, I see no clear benefit and the somewhat questionable history of all of this compels me to leave this review as a counterpoint to the others.

Bundle-Ovid (1.01)

For those who don't like this bundle, I wish to remind you that the point of the CPAN is to encourage participation, not discourage it. See for more information.

Still not convinced? I put this bundle up only *after* there was ample evidence of prior art. Previous "personal" bundles have been put out by Simon Cozens, Michael Schwern, brian d foy, Ask Bjoern Hansen, Alberto Manuel Brandão Simões, José Alves de Castro (cog) and others. Go yell at them first. Then you can yell at me :)

Hash-AsObject (0.05) *****

Ah, the beauty of dynamically typed languages. Frequently, you don't give a fig about the class of an object, you only care that it presents the correct interface. Hash::AsObject allows one to quickly and painlessly implement a simple interface when all you really need is to fetch data or conveniently store it. There's no need to mock up an interface or go through the trouble of instantiating an object merely for the purpose of providing a method call or two.

It's also great for prototyping an object that needs to be passed around but whose implementation has not yet been defined.