Ratings and Reviews for CPAN


Rate a distribution

Find a distribution you would like to review:

Recent reviews (RSS feed)

Log-Declare (0.10)

I haven't used or evaluated this module in detail, but if there is one advantage to using procedural/command syntax:

info blah;

as opposed to object syntax:


then this module clearly demonstrates it. Using Devel::Declare (or the Perl 5.14+ keyword API), the former can be easily rewritten as something like:

info && blah;


if (CONST_LOG_INFO) { info blah }

and during compilation, Perl can optimize the line away and we get zero run-time penalty when logging (level) is disabled.

(Actually, it's also possible for the object syntax to get rewritten, e.g. using source filter, but it's more cumbersome).

Benchmark-Timer (0.7103)

Nice alternative module for benchmarking with a different interface than Benchmark (marking portion of code to be benchmarked with start and stop).

For most Perl programmers familiar to the core module Benchmark, I recommend looking at Benchmark::Dumb first though. It has an interface like Benchmark (cmpthese() et all) but with some statistical confidence.

Getargs-Long (1.1004)

Nice idea, but some performance concerns. If you want to use cgetargs (the compiled, faster version), you are restricted to the getargs() interface, which only features checking for required arguments and supplying default value. In which case you might as well use Params::Validate directly as it's several times (e.g. 3-4x) faster.

If you want to use the more featured xgetargs, there is currently no compiled version.

All in all, I think users should take a look at Params::Validate first.

Debug-Easy (0.20) **

Not as easy as the name might claim. First of all, why do users need to pass __LINE__ explicitly for every call??? Other logging modules will get this information automatically via caller().

Levels are a bit confusing: why is debug split to 2 (or 3)?

Not as flexible as it should be because the design conflates some things together. For example, most levels output to STDERR but some level (VERBOSE) outputs to STDOUT instead. The output concern and levels should've been separated. Another example would be the DEBUGWAIT level, where level is DEBUG *and* execution is halted (wait on a keypress) on log. What if users want a lower level setting *but* want execution to be halted on log? The halt/keypress setting should've been separated from the level.

Parallel-ForkManager (1.12) *****

Excellent! With Parallel::ForkManager parallel programming is a piece of cake!
With Parallel::ForkManager I can run at home four matrix-multiplications or matrix-inversions or similar arithmetic formulas in parallel and at the time-cost of one.
I found it best for my programs to work with the rule of thumb
max_processes = parent_loop_length = number_of_cores = 4
and with a minimal child processing time of about five seconds.

For very small child processing times of less than 5 seconds I found that the "top" display %CPU entry of the child jobs can be as low as 2-3% making parallel processing much slower than linear processing.

Many thanks and kind regards

HTML-Template (2.95) **

I've been using this module for about 6 years now and I probably have over 100,000 lines of HTML::Template templates code.

This module is easy to learn and use... and that's why it sucks.

The simplicity tricks you into choosing to use it, but you quickly hit its limits. Unwilling to learn better templating systems, you continue to use HTML::Template, nesting a ton of <tmpl_if>s to solve fairly common logic situations, because there's no <tmpl_elsif>, and willingly burying yourself into an unmaintainable tag soup.

There's also no surrounding white-space handling, so if you choose to write readable documents at 80-char width, your output will end up with dozens of empty lines all over it.

In summation, if you want a quick one-off template generation that has virtually no learning curve, go for it, but if you're choosing something to write many HTML templates in, avoid this module—and I speak from experience.

If you're stuck with a bunch of HTML::Template templates, take a look at HTML::Template::Compiled. It offers more features and seems to work well as a drop-in replacement to HTML::Template.

Rapi-Fs (1.101) *****

Nice Extjs (javascript/web) view of a directory structure, show a little of what Perl and Rapid App are capable of doing, the only criticism that I can think of is the load time and re-load time for larger directory structures, as there is no caching (at the moment!) Ideally the perl back end should ask the file system to be notified of modifications and update web client(s)

Rapi-Fs (1.101)

Rapi-Fs (1.101) *****

Another quality module from Henry Van Styn. We are using RapidApp, and this module quickly and cleanly gives us a filesystem browser. The author handles details that you probably won't think of at first. You will come to appreciate the value of this plugin as your project evolves. I highly recommend both this module and RapidApp. We use both in production, and the support is outstanding.

Inline-CPP (0.71) ****

This module allowed us to leverage existing fast CPP routines already built within Perl code that was too slow.

Net-FullAuto (0.999999999994) *

This module should be avoided by all. Personally, I suspect its use will cause damage either due to author's incompetence or malicious intent.

The pod reads like a bad Infomercial: "IT REALLY IS THAT EASY!", "Net::FullAuto is POWERFUL", "Net::FullAuto is the ANSWER!"

It barely describes what the module does, and according to the extensive RT#100658 (titled "documentation lies") the module performs many security-sensitive tasks, yet they are undocumented and the unmaintainable mess of the code essentially guarantees there are droves of bugs. Furthermore, the output (according to the docs) of the script that uses this module is litered with unwanted messages like "Starting fullauto" and asking the user for additional passwords, which limits the use of this code as a Perl module.

The author doesn't use conventional Perl distribution tools and seems to be manually hacking Makefile.PL, which, at the time of this writing, is 6319 lines long. The code is trying to guess OS in use and then installs a bunch of software using system package manager (e.g. sudo yum -y install 'openssl-devel'). Due to issues, the author also disabled CPAN TESTERS service on the module.

The installation asks for sudo password for no explained reason (RT#97421).

Looking at the files inside the distro, there are lots of puzzling examples: UNINSTALL_CYGWIN, install_mozrepl_plugin.ahk, a directory with 75 figlet fonts! What are those doing in a Perl CPAN distribution? The code is a huge mess and even the author says it isn't really meant to be understood by merely perusing it (RT#100658).

The author also frequently uploads null updates to CPAN, presumably to gain exposure to the module, thanks to CPAN update services. The current version number is a ridiculously long sequence of 9s and the 7-year old Changelog contains 2278 lines!

In summation, this distribution does not adhere to accepted CPAN standards, the code is in poor state and works with security/system sensitive aspects, which makes the code dangerous to use.

Avoid at all costs. Don't even install for curiosity.

File-Assets (0.064) *

Hash randomization related tests fail and not updated since 2008

File-Slurper (0.004) *****

Who'da thought that something as seemingly simple as "slurping a file into a string" would need several modules and false starts? Well, if you add encodings, Perl I/O layers, scalar/list context, DWIM-ness, ... it can get complex and buggy. I'm glad there are people taking care of this and making sure that a simple task stays simple and correct.

File-Slurp (9999.19)

Use the newer File::Slurper instead, which has a clearer API (e.g. text vs binary, array/lines vs string) and encoding default. It's arguably "saner" than File::Slurp and File::Slurp::Tiny.

File-Slurp-Tiny (0.003)

Use the newer File::Slurper instead, which has a clearer API (e.g. text vs binary, array/lines vs string) and encoding default. It's arguably "saner" than File::Slurp and File::Slurp::Tiny.

Config-AutoConf (0.310) *****

I haven't used the module, but I noticed it because Math::Int64 uses it, and it worked very well on Windows 8.1 in the Visual Studio 2013 environment. Good job.

I went ahead and installed it. That also went without a hitch. I can't see any reason for the one-star review.

Syntax-Feature-Try (1.000) *****

Assuming you don't need to support older perls, this is the best module for including try/catch syntax into perl on CPAN.

Math-Int128 (0.21) *****

Excellent module for working with 128-bit integers. The C API was invaluable to me when I needed to handle integer conversions for IPv6 addresses in an XS extension. When I ran into some edge-case issues, support from the author was prompt and effective.

File-Find-Duplicates (1.00) ****

A valuable resource, my thanks to the author. All the empty files are listed, as a bonus, provided there are at least two of them. So it may be worth creating an empty file beforehand.

Windows people will sometimes have a back-slash at the end of a string. So they will need to double it up

my @dupes = find_duplicate_files('H:\\');

or be presented with a puzzling error.

In a line like

my @dupes = find_duplicate_files('/basedir1', '/basedir2');

one of the directories might not exist, perhaps because of a typing error. We aren't particularly notified of this, just left in blissful ignorance. Maybe this is something that could be looked at.

Dist-Milla (v1.0.14) *****

Miyagawa , thanks,
Dist::Milla is really helpfull distribution
I have migrated to it on my dist POD2::RU
so milla release
is fantastic!!

Dancer-Plugin-Auth-Basic (0.030) *

I first looked at this module as it had the right name and thus I thought it was the right way to add authentication to a Dancer app but this package is not very good and in my opinion is not the right way to add authentication.

So, after some research, I ended up using the Plack family heritage of Dancer and I'm much happier with the result.

Research: advent.perldancer.org/2014/20

use Plack::Builder;
use My::Dancer::Package;

my $app = My::Dancer::Package->dance;
my $authenticator = \&authen_cb;

builder {

#requires Plack::Middleware::Auth::Basic

enable 'Auth::Basic', authenticator => $authenticator;

mount '/ws' => $app;

Dancer2 (0.159001) *****

It's very small and easy to use.

Google-API-Client (0.14) *

Google::API::OAuth2::Client has no documentation, just a list of methods.

Perl-PrereqScanner-Lite (0.23) *****

A significantly faster alternative to Perl::PrereqScanner. It's *almost* a drop-in replacement, there might still be some bugs in missing detecting some modules, and you still have to do several add_extra_scanner() calls like $scanner->add_extra_scanner('Moose') to match the behavior of Perl::PrereqScanner.

Volution (0.0.2) *

Does absolutely nothing. Why is it on CPAN? Namespace squatting? It's pretty poor form uploading modules that have no functionality. Why not wait until it does something useful? Yet more detritus on CPAN