Reviews by Michael G Schwern



Term-ReadLine-EditLine (v1.1.0) *****

Since OS X decided to pretend that libedit was libreadline I've had innumerable problems with Term::ReadLine. Installing this fixes them. Fantastic!

MooseX-Method-Signatures (0.44) ***

(Full disclosure, I am the author of a competing module called Method::Signatures.)

Feature wise, this is an incredible module that I hope to recommend without reservation in the future.

It has one glaring problem: it is extraordinarily slow. How slow? At least 500x slower than a normal method call, and that's before argument checks.

My Macbook can crank through 3-4 million simple method calls a second. It can only manage 6000 with MXMS (MooseX::Method::Signatures). This is "method no_args {}", an empty subroutine with no type checks.

The empty method benchmark presents a maximum performance limit for your code if you use MXMS: 6000 methods per second [YMMV] and never more.

Large, expensive methods can use MXMS without affecting performance. Small ones get hit hard and the user is tempted to remove argument checks for micro-performance. The programmer is placed in the position to choose between performance and good practice.

Moo (1.000007) ****

As an experiment in reimplementing Moose, this is a fine module. If Mouse didn't exist, I would recommend this module for people who want a lighter Moose.

As a faster, lighter alternative to Moose, Moo falls short of Mouse.

Both don't require XS.
It has less features than Mouse.
It doesn't have Moose types (but they're available via MooX::Types::MooseLike).
Its type system is incompatible with Moose (MooX::Types::MooseLike is available, but stock Moo types are not forward compatible).
It's slower than Mouse (XS Mouse for sure).
It has required dependencies, unlike Mouse.

One thing Moo has going for it, it is meta class compatible with Moose. That is, Moo classes and roles can extend Moose classes and roles and vice versa. If Moo is measurably faster than Moose, this allows you to write some performance sensitive classes in Moo but still cleanly interoperate with the rest of your Moose classes. Mouse will not do that.

For my use, the few advantages don't merit the loss of speed and features and the additional dependencies. The incompatible type system hinders easily upgrading from Moo to Mouse or Moose, though MooX::Types::MooseLike mitigates that.

That's how things stand now. These things change with every version.

NOTE: This was originally a review of 0.009012. I've updated the facts for the latest version.

Perl6-Say (0.16) *****

Does what it says on the tin.

This module is a very clever and reliable hack to bring in 90% of say to 5.8 users of which there are still "many" x 10 such as my current paying client. Now one does not have to make the decision between the convenience of say and 5.8 compatibility.

A small improvement would be to make this module a pass through to 'use feature "say"' when running under 5.10 similar to other feature compatibility modules.

Devel-Cover (0.79) *****

The best coverage tool for Perl, bar none. Paul Johnson has created and maintained an invaluable development resource on par with Devel::NYTProf. The HTML display is friendly, informative and easy.

I cannot count the number of times good test coverage, determined by Devel::Cover, has let me make aggressive changes and saved my ass.

bareword-filehandles (0.003) *****

Does what it says on the tin.

Turns off an outdated feature that causes subtle bugs. It's lexical, so you're not inflicting it on other people's code, and it makes exceptions for the built in filehandles you must use as barewords (STDOUT, STDERR, etc...).

ExtUtils-MakeMaker-Dist-Zilla-Develop (0.02) *****

This is the perfect solution for Dist::Zilla distributions that don't want to baffle casual developers with "where's the Makefile.PL?"

Any-Moose (0.13) *****

Does what it says on the tin.

Text-Balanced (v2.0.0) ****

I thought Method::Signatures was sunk when I realized I need to detect Perl strings in the signature. Text::Balanced to the rescue!

Does What It Says On The Tin and keeps me from trying to do the same (badly).

Carp-Always (0.09) *****

I love this thing! It lets me dig out the context of those mysterious warnings from deep down in the module without having to pull out the debugger or edit code.

autobox-Core (0.3) *****

autobox::Core is the missing piece of allowing you to call built-in functions on unblessed references as methods. This cleans up a lot of grotty dereferencing syntax.



Acme-Raise_my_kwalitee (0.02) *****

Like Acme::BadExample this module is a sample pathological case. It points out a fundamental flaw/axiom in the CPANTS Kwalitee system as currently implemented.

Kwalitee != Quality.

It also serves as a negative benchmark for how well the Kwalitee system is mirroring actual Quality. If a low-Quality module like this gets a high-Kwalitee rating something is wrong. If it gets a low-Kwalitee rating, something is right.

Point is, this module serves a small, sharp purpose like a good module should. And its in the Acme namespace so nobody's supposed to take it seriously.

Filter-Indent-HereDoc (1.01) ****

Ok, I'm biased. I wrote the RFC upon which this module is based. Happy to see somebody ran with it! It really is a good idea to allow indented here-docs.

I give it a four because the simplistic "look for any <<" filtering logic makes me nervous about using this module in production.

IO-Toolkit (1.0.00010) *

An odd grab bag of functions that really have nothing to do with each other and very little to do with IO or log files. This is not a module but a collection of functions somebody found useful and smashed together into a single file.

Docs-US_DOD-STD2167A (0.06) ***

I, too, am very happy that someone bothered to churn through the Department of Defense software coding standards, repackage it as POD and released it to CPAN. This means if you ever have to write code for the DoD (don't laugh, they're a HUGE employeer of programmers) you have their horrible, horrible standards.
It also means someone is actively pushing Perl in the DoD.

Contrary to the sentiments of other reviewers, I have no problem with documentation-only on CPAN. And the horrid layout and prose isn't the fault of the author but of the DoD standard he must follow.

However, much of the documentation is unfinished stubs. Also, it *really* needs a clear and unambiguous README and some sort of overview. Documenting DoD standards using DoD standards is sort of like writing a "Learn Spanish" book in Spanish with no pictures.

A good start though. Keep at it!

Acme-VerySign (1.00) *****

A briliant parody. I gave its documentation a 4 because there's no white paper! :)