Ratings and Reviews for CPAN


Rate a distribution

Find a distribution you would like to review:

Recent reviews (RSS feed)

Net-OpenSSH (0.66) *****

I'm very happy with this module. I had issues with some other Net::SSH::* modules leaving behind stale SSH sessions on legacy devices, not having support for latest AES encryption, being difficult to install, having too many dependencies, etc. The Net::OpenSSH module is a fix for all the problems in the other modules. Good job dear authors & keep the updates coming!

Net-Google-Calendar (1.05) *

Broken and won't be fixed. Needs to be removed.

Pithub (0.01030) *****

A thoroughly-documented module with a nice interface that did the job.

However, I did spend a lot of time trying to figure out how to not have to set user/repo values on each object, as well as how to set the OAuth token.

Turns out those are documented in the Pithub::Base module and not the distro's main Pithub module, so be sure to read the docs of that.

JSON-Meth (1.001006)

[Author's Review]

First, to respond to Ben Bullock's review: the ambiguity you mention is simply preserved by the module. I'm not sure why you expect the module to magically tell you whether your initial, completely random data is JSON or Perl. To put your question on its head: how would you know when to call to_json() or from_json() when using other JSON modules?

As for the actual review:
I don't recommend using the default $j method and instead you should explicitly request export and use the $json method. The $j is too cryptic and unintuitive and has no place in a production environment, past the semi-joke way this module was originally released.

In addition, by the nature of it, this module does not encode JSON that isn't an array or object at root, which it permitted by the more recent JSON spec, since that obviously leaves ambiguities with Perl strings. More specific conversion methods might be implemented by the module in the future, but currently I lack the tuits to do so. PRs are definitely welcome though.

Pod-Checker (1.71) *****

I got a lot of bug reports about broken POD internal links, so I searched on CPAN for something to check these automatically, and found this. I am using this module to check POD before uploading to CPAN. It finds broken internal links as well as other kinds of errors, like forgetting to put =back after =over. It seems to be easy to use and works well. I had to remove some warnings about empty lines containing whitespace though, since the empty lines are within example code blocks.

HTML-Tidy (1.56) ***

HTML::Tidy just saved my day's work!
I was having a terrible time trying to parse HTML generated by a dumb application (that were not designed to convert special characters found in it's database to HTML entities) with HTML::TokeParse.

My parser is fine, but HTML::TokeParse will get lost if something looks like a token, but it is not.

With 3 lines of code (create a HTML::Tidy object, invoke clean() method and give back the result to HTML::TokeParse) I solved the issue.

The only drawback on installing it on Windows 7 was a test failing while trying to recognize ' ' Unicode character (www.cpantesters.org/cpan/report/397a1.... I forced the install and all worked for me.

If you are in the same situation (bad HTML to parse), I highly recommend this module.

Set-Scalar (1.29)

Confirming previous reviewer, the module is a lot slower (~ 20-40x) than other alternatives like Array::Utils or List::MoreUtils when you want to perform basic set operations like union/intersect/diff/symmetric diff.

Exporter-Easy (0.18) ***

I can see the value of Exporter::Easy (although these days the saving in typing is not as big, with plain Exporter one can just say: use Exporter 'import'; our @EXPORT = qw(a b c)).

However I fail to see the value of Exporter::Easiest. I'd rather use plain Perl than some DDL which cannot be checked statically or cannot be syntax-highlighted, just to save some []'s and ()'s (which I can get my editor to help me type them).

In short, I'd rather use plain Exporter than save a few keystrokes but add a non-core dependency.

Expect (1.32) *****

Expect remains critical to my needs, please keep up the good work!

Devel-CheckLib (1.05)

[Delete this, please ignore.]

HTML-Lint (2.22)

I wanted to check some cruddy old HTML pages for errors, so I started looking on CPAN. HTML::Lint was the second thing I came upon, after one other thing which looked very difficult to install.

It did a few useful things, like catching closing tags without an equivalent opening, or informing about img tags with no height, width, or alt text. But this module has a big problem if your web page contains any UTF-8 encoded Unicode characters. If you use its "parse_file" method, not only does it insist that you have to use HTML entities:

Invalid character \xC2 should be written as Â
Invalid character \xA9 should be written as ©

but even worse it doesn't take any notice of your encoding anyway, and it tells you to use entities for each byte, which is wrong and will result in a broken web page. If you read the text in yourself as UTF-8 and send it to this module via its "parse" method, things get even worse since it doesn't have any way of coping with these inputs. When I tried using "parse" on a Unicode-encoded string, I got streams of errors like this:

Use of uninitialized value $val in substitution (s///) at /home/ben/software/install/lib/perl5/site_perl/5.10.0/HTML/Lint/Error.pm line 112.

I tried fiddling with the three error switches provided, but it turned out that switching off the entity part also switches off the other parts which were useful to me. I guess one could just send the output of this module through 'grep -v "Invalid character"' to remove these bogus errors.

Looking at the issue tracker for the module


it seems like the above problems have been reported already.

Update for 2015: the module seems to still have exactly the same problems in 2015 which it had when I wrote the above review in 2008. It would be great if this could be improved.

HTML-Tagset (3.20)

Reading the bug reports for this module, it looks like it's been nearly abandoned:


The maintainer doesn't seem interested in adding support for the new HTML 5 tags and there are no updates since 2008, despite some patches for bugs. Considering there are 33 other modules which depend on this,


it really is a shame that it's not being updated, despite the many offers of help from people which one can read at the above rt.cpan.org link.

Test-CGI-External (0.08) *****

Does exactly what it says on the tin.

Very useful way to sanity and regression check CGI scripts.

JSON-Meth (1.001006)

From the module documentation:

> Don't make me think and give me what I want! This module automatically figures out whether you want to encode a Perl data structure to JSON or decode a JSON string to a Perl data structure.

So, in the event that you have something which may be a Perl data structure, or may be a string containing JSON, this module converts it into the other thing.

The problem I have with this, is how does that resolve the initial confusion? The output is either a string containing JSON or a Perl data structure. Even if we call the module twice, the confusion remains. It's as if someone made a module to help people who don't know their arse from their elbow, by exchanging their arse for their elbow. Surely this merely compounds the anatomical conundrum.

Edit: changed "for people" to "to help people".

Task-Kensho (0.38)

This module appears prominently on Metacpan.org advertised as a way for people, in the words of the other reviewer, to "in the sea of over 18,000 CPAN modules, find recommended modules for the most common programming areas". That does sound like a good idea, doesn't it? And I'd like to be enlightened as to what the best Perl modules are. But I am pretty stuck on viewing Task::Kensho. Why does it recommend a database driver for SQLite, for example? Why does it choose "Date::Tiny" over "Date::Calc"?

I would be very happy to see a comparison of modules with some kind of reasoning as to why I should pick one, so I didn't have to spend the time trying to choose one, but Task::Kensho seems to add to my confusion rather than resolve it. The big quote about Zen Buddhist terminology from Wikipedia at the head of each section of the module also doesn't help.

I am very sorry, but I do not think that this module is of general enough utility and understandability to have it touted on every page of metacpan.org.

Net-vCard (0.5) ***

Net::vFile doesn't actually load vCalendar files, despite mentioning vCalendar and RFC2445 in its summary.

Net::vFile provides a framework which another module could plug into to read vCalendar files, but no such module has been published to Cpan.

I haven't tried tried Net::vCard; I have no reason to doubt that it works as described, so don't let this review put you off if you're looking at parsing vCards.

Net-ICal (0.11) *

Doesn't install. The only record of it ever having installed was on Perl 5.8 on BSD.

Proc-ProcessTable (0.53) *****

I am an indirect long-term user of this module via other modules that needed it and therefore was one of the victims when it broke for non-threaded perls a few years ago, with all the hassle of investigating, hoping for a while, and eventually migrating away from the modules that needed it.

Coincidentally I just found this module again, and can happily confirm that it works again.

I used it to kill trees of processes using killfam and to explicitly collect such trees for other operations using Proc::ProcessTable, and Killfam::get_pids().

I could confirm its functionality with an independent pstree shell scripting solution I wrote as fall-back.

Although I only used it on Linux yet I skimmed the source to get some confidence how it approaches platform independence, and it looked good to me.

Thanks to JWB for getting this module back on track.

Mojolicious (6.25) *****

While many other reviewers lauded the distro solely as a fantastic Web framework, I'd like to add that many of the modules included are quite useful even for non-web-application related tasks.

One that stands out the most is Mojo::DOM, which is by far the best HTML parser of what's available on CPAN. It allows you to select elements using CSS selector and a few dozen of methods let you manipulate that HTML any way you want.

Mojo::UserAgent is also mention-worthy: a non-blocking UA. I started using it over LWP::UserAgent thanks to sane methods for manipulations of HTTP Cookies, but another nice feature is the ability to easily get parsed HTML (->dom method gives you Mojo::DOM object) or decoded JSON (->json method).

Mojo::Util is another module I frequently use. It provides common features that I used to import from a dozen different modules: html/url escaping, trimming whitespace, encoding handling, file slurping and spurting, and more.

As for the framework itself: I love the availability of Mojolicious::Lite, which lets you put together quick and dirty single-file web apps. At the same time, I've successfully used Mojolicious to build more complex apps (like the XTaTIK distro).

I've been using Mojolicious since around version 6.01 and did not experience any of the frequently changed API issues described by other commenters. The core team also behaves professionally and all PRs are scrutinized on their technical merits—of course, such scrutiny often results in PRs being downvoted, which I suspect is the reason why several of the reviewers felt they were attacked for making suggestions.

In summation, Mojolicious is a great Toolkit that includes a fantastic Web Framework. It's a gem of CPAN and I certainly recommend it to all.

Mock-Quick (1.110) *****

Great module, makes for much more legible test code than Test::MockObject.

The lexical "takeover" of methods in existing classes is also great. No more "local *Foo::Bar::baz = sub {}" for me.

JSON-Create (0.03) *

We already have a million JSON modules, and I can appreciate someone's alternative take on the problem, but JSON::Create poorly solves only half of it, at the price of a full module, without any added benefit or originality. You can only encode Perl data structures to JSON—something pretty much all other JSON modules can already do. If you want to decode, you need another module.

Considering the module has author's own JSON::Parse in prereqs, I don't see why the author could not simply add the 'create_json' subroutine to JSON::Parse.

Even the author's own comments suggest there's no reasonable rationalle for this module's existence. From the HISTORY section of the documentation: "I started making this module so that, with this and JSON::Parse, I wouldn't have to ever use any of the existing JSON modules on CPAN ever again." A bizarre and baseless desire.

The author is passive-aggressive about the critique they received on this module and advises to "calm down" when bugs in the module are reported on the official bug tracker. After a discussion on GitHub, the author actually deleted and edited all the comments by contributors and then closed the Issues. They also post deliberately skewed benchmarks, appear to be down-voting all the negative reviews using multiple accounts, and post snarky reviews of other JSON modules.

Looking further at technical aspects:
*) The module offers just a single subroutine, yet you have to explicitly request its export.
*) Unlike many other JSON modules on CPAN, JSON::Create does not handle objects that implement ->TO_JSON method and instead the base datatype is used (e.g. bless [qw/foo bar baz/], "foo" ends up encoded as ["foo", "bar", "baz"]). BUT, that conversion happens inconsistently: e.g. the module dies if you try to encode Mojo::URL, despite that object's overloading stringification.
*) Speaking of objects, JSON::Create dies if you feed it JSON::XS::Boolean or similar objects that special-handle conversion between Perl and JSON booleans
*) Be sure to sanitize your data for any subrefs. JSON::Create dies if it encounters them.
*) There's no handling for globs either and instead of doing something sensible (e.g. "null"), the module encodes them as "*Symbol::GEN0" or similar.

In summation, this module does not offer any original solution and seems to be a partial reimplementation of the things already available on CPAN. The author is hostile and does not welcome suggestions for improvement. Avoid this module at all costs.

JSON-Create (0.02)

Performance-wise, still has some catching up to do against JSON::XS & Cpanel::JSON::XS with regards to encoding arrays & hashes.

Data-Show (0.002003) *****

thanks, Damian,
very handy module,
I like your tricks very much:

use Data::Show;
my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";
$slurp_text = slurp($file);

sub slurp {

my ($abs_file_path) = @_;

open my $fh, '<', $abs_file_path or croak $!;

local $/;

my $text = <$fh>;

my %contents_of = do { local $/; "", split /\[(\S+)\]\n/, $slurp_text };

show %contents_of;

Spreadsheet-XLSX (0.13-withoutworldwri)

This module is great but I have seen it have trouble parsing files created with Excel::Writer::XLSX when optimization is enabled.

I applied the fix recommended at rt.cpan.org/Public/Bug/Display.html?i... and I was able to get my file to parse.

It would be fantastic if these fixes could be applied into a new version of this module.

App-cpm (0.110) *****

Due to parallel processes and defaulting on no_test, can be several times faster than cpanminus (tried installing a module on a vanilla perlbrew instance with local CPAN mirror, which pulled +- 200 distributions, "cpanm -n" took 2m9s, while cpm took 38s.) I hope this gets developed further. Great job.