Reviews by Ken Williams


Lingua-tlhInganHol-yIghun (20090601) *****

This is undisputedly the best module on CPAN. All hail.

Dist-Zilla (4.200000) *****

I just started using Dist::Zilla, because rolling & releasing distributions was getting so onerous that I just couldn't keep up anymore. As a test case I switched Path::Class over to Dist::Zilla and I couldn't be happier. I've deleted so much! The README, the Build.PL, the manual lists of prerequisites, etc. etc. And my release has gotten better at the same time, because now I have the VERSION in the docs, I'm checking against Perl::Critic, my prereqs are in sync with the code, etc. etc.

This is a great thing!

BerkeleyDB (0.39) ***

A solid module, but some interfaces are pretty weird (methods don't return values, they populate variables you supply as arguments) and the documentation leaves a lot of holes and "TODO" (to-write) sections. If some people out there know how to fill the holes (I don't, unfortunately) it would be most appreciated if someone could submit doc patches.

ToolSet (0.99) ****

I don't know what on earth the previous reviewer is upset about. Arrows are part of Perl's syntax and they're being used appropriately here. I'm adding this review as a counterbalance, to indicate that I like the idea of this module, and to state that its interface looks well-designed.

PPI (1.201) *****

I'm only a casual user of PPI via other things that use it, but I'm extremely glad for its existence. In particular, better editor support is critical for perl right now and PPI goes a long way forward on that front.

UNIVERSAL-can (1.03) **

Why would a class override the isa() mechanism? Is it also going to override perl's @ISA-search mechanism to define its own sense of inheritance? Of course not.

In my opinion the fact that can() is a method at all is unfortunate, it should simply have been a language feature like tied() that a class can't override. The various kludges to get things to work for classes to override can() seem to be exhibit A.

Overriding can() is a whole different beast. That's often quite a good idea, especially in cases where the set of methods defined by a class aren't known in advance. But isa() is very different.

XML-Generator (0.93) *****

This thing is super-cool. It relegates XML to its proper place, that of an output format. It lets you generate properly-escaped XML in the easiest possible way, and then you can lord this fact over your Java colleagues who are doing out.println("<tag>" + data + "</tag>").

File-Spec (0.85) ****

I have a love/hate relationship with File::Spec. Its existence is a great thing, and everyone should use it or something like it. But its interface was never really designed, it was sort of extracted from some code in ExtUtils::MakeMaker. It's actually fairly difficult to write code that uses File::Spec for anything complicated on multiple platforms, though.

I maintain File::Spec because it's an absolutely essential part of Perl's toolkit. I created Path::Class because I think we can probably do better than File::Spec.

HTML-Mason (1.22) *****

Mason is a really great tool for building large, dynamically-generated web sites. It is very customizable, and its features like autohandlers, inheritance, and dhandlers reduce the redundancy and increase the maintainability of sites.