Reviews by نديم الخمير


Data-Structure-Compare (0.02) *

An extremely bad name, other existing modules doing the same or that can be patched to do the same.

We all mess up our first module (I did), do everybody a favor and remove this one from CPAN.

overload-eval (0.10)

Has its place right beside Carp::Always in your debugging toolbox...
once it's bugs get fixed, yes unfortunately it doesn't work as advertised!!!

Number-Range-Regex (0.02)

A simple way to make your code readable if you you match numbers with regexes.

Tie-Ispell (0.08) *****

Practical and clean implementation of spellchecking via a tied hash. I am replacing mine with this one. noteworthy to know is that the ispell process is kept alive while the hash is tied

Config-AutoConf (0.19) *****

I haven't used this one directly but I saw it use in Tie::Ispell and got curious about it.

a Perlish way to get system configuration.

Git-Raw (0.04) *****

On the top of my list of things to try. Using git in scripts all the time, I'd rather get something more usable than a screen dump to parse.

Filter-Unpound (1) *

Plenty other modules doing just that already. I am guilty of writing one (which I should rate with one star myself)

Something this generic without a "See also" section is often a sign that the author didn't do his homework.

Now, if a comparison of what exists there and this module was in the documentation, users could make a choice.

Regexp-Debugger (0.001005) *****


Syntax-Feature-Qwa (0.001) *****

Reduce glyph clutter when creating hashes or array references from lists a la qw.

Sub-Stubber (0.04) *****

A module I'd like to give a 5 stars rating but it is so completely illogical (to me).

I'm fine with everything except that the stubbing work is done in the wrong place. If I have a module with a few subs, I don't want to modify or add code so it is easy for someone else to transform my subs into stubs.

This is obviously thought as a mechanism to hep test your own module. But what if someone else want to stub a sub I didn't think about?.

I find no flexibility in this system.

Term-Emit (0.0.3) *****

Fun and useful!

You have to be careful when mixing 'emit' and print. print being non overridable, it's not something you can just ignore.

One nice feature, that I have no use for but may come handy some day, is that indentation is kept across processes (I believe withing a single thread of execution)

App-Prove-Dist (0.02)

This module is a typical Ingy module; a very good idea that is released in the wild. He warns of not using it yet because it is still under development.

I like the idea of automating the test for multiple Perl distributions through perlbrew. Definitely a module to follow.

I hope this will be made stable soon and that it also finds a maintainer soon after.

Sub-Mage (0.007) ****

Would be better without the silly name, silly sub names, and silly section names. But, I guess, Authors are also allowed to be in a playing mood.

Practical sugar to manipulate sub override. The ability to simply restore the old sub, override methods, have before and after hooks is ... practical.

I also liked the possibility to add a before-hook to all the subs in a package by using __PACKAGE__->sub_alert;

Mock-Person-SV (0.03) *

Generated names are not Swedish!

Sjöström is Swedish, Sjostrom is not.

Test-More-Behaviour (0.4.1) *

Not documentation, no test, quite worthless!

Changing the module name from a silly PerlSpec was a good move and proves that the author is responsive to bad, but constructive, reviews. I hope this review will have the same effect, put documentation, put tests, make it worth a lot.

How do you expect anyone to use this module?

how do you expect anyone to look inside it if doesn't link to its, un-existing, documentation?

Path-Resolver (3.100452) ****

As always, a module discovered by accident.

I already have a module that look for a file with a specific filename in different file system 'repositories'. This modules does the same but after a mega dose of steroids. files can be looked for in compressed archives, perl module distributions, ...

One resolver that would have been nice to have is a ~/.something resolver. that can be done easily with a normal file system resolver though. I am sure we can all think of other, more exotic, resolvers.

My only problem with this module is the extremely verbose syntax. Nothing really wrong with it except that it is extremely verbose for _my_ taste. That is not a big problem since this type of modules are typically used very few times, often in setup section, in applications.

A quick look at its dependencies reveals a few other modules that I haven't used or heard of and that may be worth having a look at. My attention was drawn to Eval::Closure for example.

Internals-CountObjects (0.05) *****

Module that makes it easy to see how many "objects" are currently used. The "diff" functionality can be used to show what happens in specific code block.

Devel-STDERR-Indent (0.06) ****

Helpful module. The interface is simpler than, say, Text::Indent.

Be warned that this module is going to install and use Moose; which may be OK for you.

Food-ECodes (0.06) ****

if you ever wondered what 'E101' or 'E621' or, worse, 'E701' additives in your food are, you now have a perl module to help you find out.

I belive that sub get_status should return something else than HALAL,HARAM or SUSPECTED or be named get_halal_status. And continuing in with this sub, a mechanism to include other faith, preference, etc.. should be provided. Like all databases, which is what this module is for the most, a mechanism to validate, update the db would be a nice.

The same goes for EU approved and US approved, wouldn't it be better to get where it is approved instead for adding a specialized interface for each country that gets added?

I would have liked a command line script, maybe in the next version

A bit unexpected code that goes through classification to check if a nomenclature exists when a simple lookup would suffice or at least avoid writing the same code for all the subs by factoring it.

App-moduleswhere (0.02)

pmtools provides this and many other. The best would for the author be to remove this module from CPAN altogether or if it doesn anything that pmtools doesn't see that it get integrated in pmtools.

I changed the rating from one star to undef as it seems that some people can't get pmtools to work on Windows. My opinion hasn't changed though.

HTTP-AppServer (0.04) *

Please do not rate you own modules. And your review is not a review at all. I'll remove this when you have removed you review.

true (0.13)

Ridiculous is the first thing that came to my mind!

To not write "1;" at the end of your modules, you have to use a whole new module that you have to install and push onto your users.

There are "explanations" in the documentation, all failed to convince me.

The simple construct:

use true ;

Goes on my nerves, It means zip.

I'm not rating to avoid a flame war but this is good for an overall 1 star or less.

Linux-Inotify2 (1.21)

Removed previous rating.

App-Staticperl (1.21) *****

I like where this is going. Good documentation for such a new module.

"This script helps you to create single-file perl interpreters or applications, or embedding a perl interpreter in your applications" made me curious enough to look more in it.

Out of the box install with cpanm (all build failed miserably for me previous to 1.21). Now it's time to play and come up with a serious review.

App-CLI (0.09) *

No usable documentation at version 0.09

Autocache (0.004)

This is module is new. I do not rate it but report a few points that may be interesting.

Although the module names the Memoize module, no direct comparison is made (neither textual nor time based). Memoize author has integrated extra functionality written by other authors in the past; this makes me wonder why the author of Autocache did not integrate his ideas in a plugin! Autocache is supposed to be very similar to Memoize, according to its author.

Autocache brings context dependent caching as well as the possibility to add Normalizing function to the memoizing mechanism. I will not get into the details which are much better explained by the author in the module documentation.

Missing from the module is the possibility to save the cache in a DB although Autocache::Strategy::Store::Memcached and other are named in the documentation.

Although I'd rather see this module integrated in Memoize (if possible) it may fill a niche. Time will tell. In any case, the amount of tests is 25% of the amount of tests for memoize (in rounded bytes) something the author is well aware of and warns us about.

A new module to keep an eye on.

App-moduleshere (0.07)

Does more or less the same thing as App-Pmhack, albeit better. Now I don't know which one was there first but one of the authors should synchronize their efforts.

I am surprised by the fact that App-moduleshere contains nothing and the script contains the code. Most of the App::* modules contain code and the scripts almost nothing with the hope that someone will reuse the module somehow.

I also believe that it would be nice if the tools manipulating modules all started with 'pm' as the tools in Maybe this should even be part of the pmtools module.

Data-MessagePack (0.23) ***

Reviewing a module to allow it to get a "rain check" (LOL) or bring it's rating up is dubious and silly at best. This is not about being nice to your friends but being serious with the whole community.

There is no credit for delivering something, ever; just the illusion. Nobody cares much if the author will make the module better in the future (which unfortunately doesn't happen as much as it should). The rating is for what is delivered not for what you wish for. When the modules get better, most serious reviewers re-rate. and if they don't do that, the module author can contact the reviewer.

The module description states "But unlike JSON, it is very fast" which is not true. Even if I didn't believe what Peter said (he is the author of Benchmark::Serialize) the figures in the modules say:
serialize/de-serialize, JSON:480_000 MP:550_00 nothing that grants that module to be "very fast" while the other is not.

The module doesn't handle perl objects. This is seriously limiting unless you use it to simply communicate with other apps that use MessagePack. This would still be a bit lacking as the other app may well be a Perl app.

App-Pmhack (0.002) ***

Practical way to hack an installed module. "Practical" not good.

Copies a module from your installed module path so you can hack it. It handle a hierarchy of modules under the top module. Or so it says, a quick look at the code tells me it doesn't and the test are not there to check that case.

Environment variables suck, doesn't matter how smart you think it's going to be to use one.

it's cool to discover that Perl allows "my" a bit everywhere but is:

@inc_filenames ? my $inc_filename = shift @inc_filenames : croak ".."

really better than:

my $inc_filename = @inc_filenames ? $inc_filenames[0] : croak "..."

or even:

my $inc_filename = $inc_filenames[0] or croak "..." ;

In any case, and not because of this module, this is going to be a real nightmare when people forget to deliver their hacked modules.

Test-Ranger (v0.0.3)

The module is tagged as THIS IS A DUMMY, NONFUNCTIONAL RELEASE. so am not rating it (yet). This review is to give soem feedback and make people (that visit this site) aware of the module.

it would be good to mark the module as a developer release since it is exactly that.

There has been a frenzy (well 3-4) of new, better-than-the-old, test frameworks and test description.

Frankly, I find most to be less readable and practical than the old framework. I may be conservative and I do wish to be proven wrong.

This module is no different, making simple things complicated. There is at least an embryo of explanation about why it should be better.

This is also a new module author to whom we wish the better of luck and waiting for the next release.

File-CodeSearch (v0.2.0) *

One mean star so this new module author (believe me we love new authors and want many more of them) because he delivers an application (which could have been under App:: but that's a little detail) without _real_ documentation. Why is it in File::CodeSearch? beats me.

What is it for? How do the zillion switches work together? Where are the examples?

If this has a potential to be useful then the documentation should make it more accessible. Although I don't want to control what gets on CPAN, it would be good that authors remember that it is not only for their ego or archiving purpose (I am guilty of the same, sometimes)

I'd be happy to give this a 6 stars rating (if it was possible) when its documentation is more complete. The obviously very important bug is fixed and there are more tests.

I hope I can re-evaluate my judgment very soon, we have great hopes and demands, for the next generation.

Data-Thunk (0.07) *****

A replacement for Scalar::Defer.

The documentation clearly states why this module should be used instead. There is just a lazy sub and no defer so I expect memoizing to work differently (a comment in the otherwise good documentation would have been good). On the other hand, you can find a lazy_object and lazy_new subs.

Take also a look at Data::Swap.

Devel-Deprecate (0.01) *****

I like this one, product life cycle management from within the product itself.

Module is so simple a review sounds overkill. Read, Install and use it!

Const-Fast (0.005) ****

A replacement for Readonly.

Although I welcome this module, specially if it is much faster than Readonly there are a few things that I would have liked to see in the documentation.

The author writes "I stumbled on some serious issues of Readonly that aren't easily fixable without breaking backwards compatibility in subtle ways" and "Readonly's use of ties is a source of subtle bugs and bad performance". Please, please enlighten us. What are the performance problems, and show us a benchmark so the zillion users don't have to run their own, and tell us about the subtle bugs so we don't fall pray to them. Those get the documentation a miserable two stars.

Then Leon goes: "this module uses the builtin readonly feature of perl". From which version of perl? ah! right, 5.008. that could be in the documentation instead for the source.

Really, wasn't there a way to make this a Readonly update? I'm quite sure Readonly author is not that difficult to work with.

Otherwise a good module, which I came to expect from this author; Check the other goodies he wrote.

Data-Hive (1.006) ****

Simple module to store and retrieve values. The documentation has been augmented and it describes the why and how of this module.

I dislike the all uppercase sub names and the redefinition of the meaning of EXISTS but it's a question of taste.

A Benchmark would also have been nice too see. Is three times slower than accessing a hash or a thousand times slower?

Perl-Critic-Pulp (42) *****

Many small and nifty policies, well worth a look at.

Data-Show (0.001001) *****

As always with Damien's modules, there is more than the eye can see.

Have a look at the implementation; I think that's where the payload is.

I'll shamelessly say that Data::TreeDumper will do more and certainly present large amount of data in a, IMVHO, better way. DISPLAY_CALLER_LOCATION => 1 in the argument list (create your own dump function or curry the one from D::TD) will also display the call line.

There are a bunch of dump modules on CPAN, look them up too.

Still, if you are OK with the implementation, did I already say to have a peep?, this can certainly be helpful.

Perl6-Refactor (0.01) *

An empty module!
An empty module not marked as developer release!
An empty module not documented as empty!
An empty module that hasn't been touch in 18 months!

Less cruft, more essence.

App-Benchmark (1.102310) *****

Excellent idea!

We were already good at testing on the user's platform; now we have an easy tool to also profile on the user's platform.

bw-db (1.1.1) *

Bad synopsis and documentation. I still wonder what that stuff does! I also don't understand what "sub returns VOID" means.

The self rating to 5 stars is what will put a the final nail in this modules coffin.

File-chdir (0.1004) *****

I really dislike the API to File::Spec and I would have given a top rating to anything that resembles a way out of using it.

File-chdir API is more natural if you like side effects. In this case assigning a special variable to change directory.

Localization of the directory change is certainly the most powerful part.

DR-SAP (0.16) *

Completely empty module (at version 0.16) and thus totally useless.

Either mark the module as a developer release (and even that would be a bad idea in this case) or keep empty stuff away from CPAN.

CPAN is not a version control system, not even for useless empty modules. You are wasting the time of people using CPAN.

File-Slurp-Unicode (0.7.1) *

Distribution, Interface, Ease of Use is a five stars
Overall, a single star.

Why use 5.10 features to fix a problem that a lot of 5.8 users still have? Is it just to be able to use '//' ?

In any case the code still contains the following, twice!:

({encoding}||'') eq 'binary';

There is so little code in the module that a 'defined' or two wouldn't have hurt much.

This module would have been used by many judging by the File::Slurp users problems with lack of encoding support (File::Slurp author had time to write a nice (and I mean it) extras/slurp_article.pod but seems to be a salt statue when it comes to fix the years old encoding problem (which the said users have provided patches for))

I'd be very happy if all used perl > 5.10 but in this case it is plain ridiculous.

Block-NamedVar (0.006) ****

module that allows you to write "foreach" loops where you can extract multiple, named, values from the for argument.

nfor my ( $key, $value ) ( %a_hash ) {

print $key, " = ", $value, "\n";


Something I'd like to see built in the next version of Perl (pretty please).

You can, of course have nfor inside nfor, inside nfor, ... This is the first module, I believe, that allows you to do that.

I would have liked to see a benchmark for this module.

As much as I think nfor is nice to have, I see little usage for ngrep and nmap.

The module uses Devel::Declare::Interface. I don't know if it is a good coding example but it may be worth having a look at it

Altogether a nice "Sugar" module that could make code look better.

Capture-Tiny (0.07) *****

Nifty module to capture stdout and stderr. The very simple syntax

my ($stdout, $stderr) = capture {} ;

feels very natural and you get localization of capture too. The qw(tee capture_merged tee_merged) subs are also practical.

Well written documentation with a complete 'See Also' section.

autovivification (0.06) *****

If you believe that:

exists $hash{A} => 0
exists $hash{A}{B} => 0
exists $hash{A} => 1

is weird, This module will fix your autovivification blues.

Be sure to check the METHODS section, specially 'store'.

Exporter-Renaming (1.19) *****

While Sub::Exporter allows modules author to let the user modify the names of what is exported, This module allows the user to modify whatever the module author exported.

It provides a much cleaner interface than glob manipulation.

You may also want to have a look at Sub::Alias and other aliasing modules.

Naming the other CPAN modules in the "See Also" section as well as
a comparison between them and Export::Renaiming would be a welcome addition

Carp-Always (0.09) *****

Extremely useful.

The other reviewers have done a great job at reviewing this module. I just wanted to say how helpful this module is.

Remember the name of this module it _will_ come handy someday.

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

tlhIngan maH!

Behind the humor lays a serious work (which is the mark of its author), an implementation and even diagnostics!

It's been long since I had fun reading a CPAN module documentation!


IPC-Run (0.89) *****

Worth having a look at if you are using Open3, system or qx.

The module documentation is excellent. Maybe one of the best documented module on CPAN. I am jealous.

Timers, redirection and filters make controlling an external process straightforward.

App-perlbrew (0.03) *****

I've always missed a tool to switch perl versions like gcc-config or eselect. Since this installs perl in your home directory, there will be no interaction with the system perl which is a source of many headaches.

I hope that in the future perlbrew can take a local perl git repository and a tag.

installation and utilization is a breeze.

IO-Callback (1.07) *****

Nifty module that allows you, among other, to generate data on the fly and present it through a file handle.

Good documentation with examples (something too rare on CPAN)

Test-ExistsExecutable (0.023) *

Very poorly chosen Module name. I had to look at the test to be sure about what it did.

Test::SkipAllTestsUnlessExistsExecutable, although boringly long, reflect better what the module does.

I hope the author fixes the name and documentation and that a real Test-ExistsExecutable, which fails if an executable does not exists, finds its way into CPAN instead.

Data-TreeDraw (0.0.5)

I'm not rating the module as I am the author of Data::TreeDumper and thus may be too partial.

Does very little that Data::TreeDumper doesn't and doesn't lots of what it does.

The integration of a table for the dump of a 'Lists-of-Lists' is an interesting idea as is the 'Method introspection for objects'. But even those are not enough for the creation of a module which copies an existing one. I would have appreciated patches or extra modules instead.

In any case, TIMTOWTDI and I hope this module will find many users.

Data-Inspect (0.04) *

Does nothing that Data::Dumper or any of the any other dumper does.

If you are looking for a single letter dumper call that looks like what ruby does then this may be an excellent module.

There is a bunch of other dumpers:

and finally Perl6::Perl which comes with a 'p' to please the ruby aficionados

getaddress (0.03) *

A single star for doing everything wrong.

- 8 MB data file in the distribution
- no tests
- wrapping a function name in a different function name
- grabbing a top namespace
- ...

Path-Trim (v0.0.1)

I believe this does the same thing:

App-Asciio (1.02.71)

Answer to Evan Carroll:

Thank you for your input. I think your review would have been more helpful if it hadn't been an error report. May I suggest that you re-review the module?

As for the errors you reported,

RT is up at or you could have send me a mail (my mail address is listed in the module and on my cpan page).

Gtk2::Gdk::Keysyms is part of GTK found here I don't think I need to list it as a dependency but I'll check.

Warning from GTK. The GTK group said they would remove the warning but didn't say when. There is no danger of error. Test will be updated.

Wide character in syswrite at /usr/local/lib/perl5/site_perl/5.10.0/File/ line 330. See
File::Slurp doe not support Unicode. The needed change has been listed in the todo for quite a while.

MAKE TEST failed: Illegal seek /usr/local/bin/perl Build --makefile_env_macros 1 test t/001_load. That one beats me! I doubt it has anything to do with Asciio.

I also notice that you are using a rather old version 0.95_01 which is a beta. 1.02.71 is on CPAN. 1.50 is in the queue for release and I'd appreciate beta testers :)

Cheers, Nadim.

File-Slurp (9999.13) **

The module does _not_ operate properly with :encoding. After two years bug is still there patiently waiting to be fixed.

It is too much frustration for a simple localized $/

Perl6-Slurp is much cooler and powerful (eg: regex input record separator) although it lacks 'write_file'.

If you need raw access File-Map is another contender

App-cpanminus (0.9910) *****

Finally someone decided that the overly verbose output from cpan had to be dealt with.

The author fixed an error I reported within 24 showing his willingness to get cpanm to play with the big boys.

A few things I'd like to be changed are:

- An even less verbose output
- switch '--sudo' should be the default (nothing an alias can't fix though)
- The module is not really a 'standard' module in its structure
- within a week of development it went from simple to, already, trying to do a lot, maybe too much.

Altogether an excellent addition and my now 'standard' cpan front end.

Test-Exception-LessClever (0.001) *****

First, look at the documentation to understand why Test-Exception, the module this module was written to replace, is broken. Looking at the test reports for Test::Exception ( one could believe that the author of Test::Exception::LessClever is exaggerating but he is not. I just upgrade my system perl to 5.10 and all my modules fail in Carp::Heavy with very weird messages like " Bizarre copy of HASH in sassign at /usr/lib64/perl5/5.10.1/Carp/ line 104".

Unfortunately Test::Exception::LessClever misses the target because:

1/ We don't need another module. We need Test::Exception::LessClever author to cooperate and propose patches to Test::Exception (please)

2/ The test directory of Test::Exception is three times bigger and I would have liked Test::Exception::LessClever to handle those tests (as much as possible) if it is to replace it.

3/ Although it is nice to not have weird Carp::Heavy error message, you will have to go through all your tests and change them to handle the new output (which is not as helpfull), IE:

# Wanted: (?-xism:long at t/004_diagnostics\.t line 30)
# Got: long at /usr/lib64/perl5/site_perl/5.10.1/Test/Exception/ line 81

On the other hand, a warning is displayed If a DESTROY method masks $@ in the evaluated code. looking at may also be of interest.

I'd rather see this module disappear, although I salute his author for the work he has done, and see a solution in Test::Exception.

This module may already deserves a five star rating as it provides a temporary solution and may get the author of Test::Exception to rapidly provide an updated module.

Enbugger (2.009) *****

Adds the possibility to load the debugger at run time, with panache!

The documentation is clear, concise and complete. The kind of modules I like.

The possibility to load the debugger on specific event (broken pipe someone?) is excellent.

The module example where injecting a remote perl debugger in a running process add even more value.

Perl-Critic (1.105) *****

IMO, the most important module released lately.

Having Perl::Critic run from xt/author helps limit dependency installation.

Devel-Declare (0.005008)

There, aome documentation and a module becomes much more attractive!


Test-Prereq (1.036) *****

Excellent way to stop uploading incomplete modules to CPAN. The setup is quick, 2 lines in a file.

It's slow so I only run it before uploading modules but it is worth every seconds you wait for the results.

Search-Indexer (0.75) ****

Among the three available indexing modules this one offers the best balance in the form of a simple and effective API and a good search description language. Indexing a few thousands documents is fast.

Unfortunately there is a little point that make the module less worth than it could.

Removing document when the 'positions' argument is 0 and you don't have the original document keeps references to the document in the index database. That is, if you add a document and then remove it, a search would still return the removed document id. This is very wrong! (RT #43508)

You can work around the problem by checking that the document id exist.

Attribute-Tie (0.02) *****

Very clean way to tie a variable. I like the analysis of the difference between Attribute::Handler autotie and Attribute::Tie. The automatic loading of the needed package and error handling earn this module a five starts.

Inline (0.45)

This is not a review!

Finally! the long awaited 0.45 version is out and maintenance is switched to Sisyphus.

A road-map for the module, specially information about integration in Perl6 would be interesting as I always wished XS would disappear and leave the place to Inline.

I hope the, once loud, buzz around the Inline modules will be heard again.

Test-UniqueTestNames (0.02) *****

No more excuses for not properly naming tests.

This module will verify that you have named your tests and that you haven't used the same name again and again.

It still fails test on a few platforms, I hope that will be fixed soon.

Extremely easy to use.

lib-tiny (0.6)

Finally an updated documentation. My previous remarks have been addressed by the author. I hope many will find this module useful.

Test-More-Strict (0.02) *****

One error that is often made is that less time is spend making tests well organized, look good, documented, etc .. than time spend on the code that is tested as if tests were second order code citizens (I believe the opposite is true)

This module comes with an example that shows you how to force your tests to have a description.

While this is great, I hoped for more examples. I would also prefer to see this under Perl::Critics::Test and the different tests to be policies.

I like where this is going.

Git-Wrapper (0.003) ****

This is a pure syntactic sugar which lets you call git through an object instead for calling it directly. Nothing more.

The source is very short and is a nice example of how to sugar-coat external commands.

Links to other modules handling git and particularly VCI would be helpful. Link(s) to git would also be nice.

I hope this module will make people more aware of git, an excellent version control system.

PJVM (0.01_02) *****

5 start for a developer release of a module that does almost nothing (yet) because authors like Claes deserves to be rewarded by some admiration and coverage.

A Java Virtual Machine written in Perl is a cool thing in itself but the goals stated in the documentation make it even more interresting:

Implement multiple bytecode backend execution engines, such as:

* Simple switching runloop

* One that can transform Java bytecode to perl optrees directly

* Transform bytecode -> Perl source and eval

* Fast JIT:ing backend written in XS

Have a look at Claes other modules too, JavaScript, Parse::Java and Scripting come to mind.

Debug (0.02) *

- Extremely bad name (for the little it does).
- Extremely bad namespace.
- Extremely bad documentation.
- Extremely bad to not use one of the already existing logging module or extend one.

DataExtract-FixedWidth (0.02) *

Rating your own module with 5 stars will make you look like a total jackass or someone with self-distance and balls. You can find out which one you've been categorized in by checking how much your review is helpful to other. Use 'undef' in the 'overall' entry or, better, don't review it all.

It would have been unfair to not review your module (and its first review). I could have used 'undef' but I'm a mean bastard.

Had you had an ounce of humor and knew sentences start with an uppercase would have made your review more bearable. The review itself is style-less, dull and unhelpful.

"Oh my God!" is an interjection. Used properly it will make your audience curious. God is spelled with an uppercase 'G' whether you believe or not. The exclamation point '!' is what makes the interjection an interjection.

It's nice to know that you could use your own module in at least three, yes people three, places. I'll admit that I have written modules that I haven't used at all (yet, I like to plan long in advance).

Trying to make the best of your review, I, at least, wanted to learn what a 'shanker' is. The only explanation I found was "The primary skin lesion of syphilis".

The module is a heavy weight champion of 97 KB sporting Moose internals and a rather complete looking package with bells and whistles. This let's us discover that version 0.01 was tagged:

"First version, released on an unsuspecting world."

This module requires Perl 5.10, which is not a bad thing at all, so it won't install on many systems yet. I've just discovered another use for Perl 5.10.

I'm not running 5.10 on this box (it's a lie) so I can only present a shallow review of this module:

"The one stop shop for parsing static column width text tables!"

All the test are "best possible" data (tests presence is why you get at least one star). There are no test input that would break the module (which makes it easier to say you pass) but why would there be better tests for a module you can write with 2 lines of Perl?

We can also discover that this module is under version control using "git". Excellent! But you get nothing for that.

It's a pity I can't vote for my own review or I would have marked it as "Best review on cpanrating and as useful as butter on a shanker".

Test-Trap (0.1.1) *****


This module handles a lot of things you want to control during testing, warning, exceptions, IO, ...

It also handles warnings containing embedded "\n" properly unlike Test::Warn.

Test-Approx (0.02)

Nice of you to answer quickly.

Copy/Paste is a mistress that always ends up stabbing you in the back ;)

Well,I showed my lack of English vocabulary. "Approx" is indeed in the dictionary. I dislike abbreviations and that one seemed very silly to me.

Test-String-Approx is a better name unless you also plan to support:


Devel-Events (0.05)

Yet another module that sounds exciting just find out documentation is bad or incomplete. A high level documentation would be most welcome or at least real world examples.

Pod-POM (0.17) **

Extracting verbatim sections from =for sections is not possible. Worse, the verbatim section is move to the, well , verbatim sections without any reference back.

The documentation and interface are good so the low rating mainly mirrors the erroneous parsing of =for sections.

Chooser (1.1.3) *

This module has been planted in CPAN to check if there are reviewers around.

What is this!!!

kephra (0.3.7_3)

This is a developer release so I'm not rating anything.

After reading the module's documentation, my body temperature went up 5°C. What! there are already modules that do that. Then I saw who wrote the module and instead it's 5 stars for the effort and finally doing something instead for just talking :) but less starts for:

- Releasing a 'cpan installable editor' that doesn't install from cpan

- Reinventing the wheel, when there is already a module that does most of what kephra does (OK, Herbert must have had the code laying around anyway)

- Not having tests

- Having a crossplatform app that only exist for the win32 platform on its website

Time will tell

Makefile-Parser (0.209) *****

Heroic effort. As much as I would like to see make desapear for big projects, it's going to be there for a long time. This module is the beginning of the end, allowing you to parse makefiles and make something better from them.

Test-Server (0.04) *****

Excellent idea. This is how _everything_ should be done. There's little to review, a quick look into the module should make you want to use it.

XML-TreePP (0.33) *****

The only XML parser I got working on dia output on the first try. The documentation is nice and complete (which is always a good sign). the implementation is pure Perl which is practical when you can't or don't want to install external libraries.

Package-Generator (0.100) ****

Yet another practical module (2 modules in fact) from Ricardo. This one will handle the Voodoo needed for package generation and removal.

This module is small so except the fact that it's practical and does the job, there's not much to say.

I gave 4 stars instead for 5 because I didn't like the interface of Package::Reaper. 'arm' and 'disarm' would be better as, IMHO, just 'arm'. The code is exactly the same (one should call the other btw). So that would be one less sub to write, document, test and learn. But the biggest win is to not have to switch on a value to decide which sub to call. But I'm splitting hair.

Ricardo has a few other "small" modules (by their size not their usability) the kind you want to write but never take time to. Check in his directory on CPAN.

Params-Clean (v0.9.3) *

This is the most difficult review I've written so far. Maybe because I really wanted this module to be exceptionally good. Most of the time when I give a bad review I feel quite sure but not this time. Go see for yourself. Try it if you dare and give us a counter-review.

This module documentation is just horrible. It gives me a bad headache. It starts by the synopsis that is frustratingly messy and continues with documentation that keeps exploding my head.

Few are the paragraphs where an unnecessary comment, an exception, or a special case, is not contained within parenthesis.

Going through the documentation three times feels like meeting Sultan Ibragimov in a back street of Makhachkala.

"Params::Clean lacks various advanced features" we are told to later tell us it has "semi-advanced features".

The examples are contrived to the point where the author himself tell us they are confusing but that's sake of demonstrating how things work. The examples are given with barewords which mean they don work with 'use strict'. The reason, we are told, is clarity.

The interface is not much better, it feel synthetic. Flags are counted [undef, 1, 2, ...] not [0, 1, 2, ...]

However I look at it, this module make me feel dizzy.

So what about the functionality? Frankly I don't know, it seems a lot of work went into the module and there are tests including the examples given in the documentation. But after my defeat against Sultan, I didn't feel like installing the module and get yet another pounding.

Pod-Advent (0.04) *****

Finally! Someone has taken the time to make it easy to write Perl advent entries. We have no more excuses for missed advent calenders or still miss entries a good week in the December month.

The idea is very simple and using almost POD with specific tags should make it accessible to any perl programmer.

What is needed now Is a way to submit the entries

Pod-POM-Web (1.08) *****

Pod::POM::Web is a welcome addition to a the perl developer's toolbox

If you have used ActiveState distributions, this will remind you of the documentation AS installs.

I noticed the following:

Display is a tad slow. getting stuff from is faster than from my local box

Clicking on a module name that has sub modules centers the module in the "tree" window, next click displays the module. This is not an error but I find it disturbing.

It doesn't look as good as or

I have been testing Pod::POM::Web with a local server and it dies without explanation (happened a few times).

Still, I'm looking forward to more releases of this module.

Spreadsheet-Engine (0.03)

Welcome addition to the Spreadsheet familly of module. It would be nice if the author shares his development with other modules. I'm thinking about Spreadsheet::Perl which would welcome a calculation engine. A comparison with other existing modules, if applicable, would be nice too.

Date-Manip (5.48) *****

Slow! If you are going to use it to parse tens of thousands of dates, you may look into another module or do the parsing by hand.

On the other hand this is a very complete, well documented module that brings a lot great functionality.It also has a bunch of tests. The code is not documented a lot but it's nice and clean (and big).

A well deserved 5 stars for a module author that does a serious job.

FileHandle-Deluxe (0.92) *****

Browsing without goal can sometimes help find little jewels.

FileHandle-Deluxe may have a funny name but is excellent at taking care of some security issues. If you're lazy but still want to be careful this module is for you. Even if you don't use it, just reading the documentation is a good idea.

Want (0.16) *****

I give 5 starts for the functionality of the module but only 2 for the interface. IMHO, the interface described in Perl6 RFC 21 is better.

Having to test every possibile context instead for 'want' to return the context is asking for 'ugly code' when using this module.

I also dislike subroutines that do very different things depending on the arguments. In one case it returns the context, in another case the number of expected returned elements.

'howmany' doesn't return anything if the number is unknown (list context); does it mean 0 or infinity.

The 'LIST' versus 'ARRAY' is going to surprise a few but I believe it's the right decision.

Want is, as expected, slower than wantarray (20x). This doesn't have any real impact on applications. It is an important point if 'want' is to replace 'wantarray' even for simple cases.

The author asks how his module is going to be used. At first, I will use it to verify that the expected number of returned element matches the arguments my subroutines are asked for. This helps me help my own modules users.

I still think this module is an excellent idea and I am looking forward to give it 5 stars when its interface is more "consistent". Then, I'll be happy to switch completely from 'wantarray' to 'want'

Pod-Manual (0.07) *****

I give this module 5 starts as I find it useful and the pdf output looks very nice. But ... AddChapter is a rather useless as AddChapters can take a single chapter. If you use this module to aggregate modules documentation, you will be disappointed that the module's name is not added; making it very difficult to find where things end and other things start.Being able to add the author's name and other information would have been a nice touch.

I'm also missing a command line tool (though very easy to implement)

Altogether a nice module which I hope will have a new version soon.

Getopt-ArgvFile (1.11) *****

This module is copyrighted (c)1993-2007. WOW! How many modules from 1993 are still useful. This also means that I have implemented the same functionality multiple times (and certainly in worse ways) for nothing! Don't make the same mistake(s).

The module is very complete and easy to use.


Tie-Tools (1.06) *

I'd expect some documentation for a module with version 1.06!

There a link to another module that says "documentation comming soon". I'd rather see modules that are documented but not the implementation done than the opposite.


Validator (0.01)

I haven't put any figure in this review because it's altogether too badly documented to deserve a review.

First modules are hard to write. I hope the author will see this as "the perl community cares for what I do" and will work seriously on this module. CPAN is not a repository for your current work but a repository for modules that can be used by other perl developers.

Cheers, Nadim.

pod2pdf (0.42) *****

Very nice utility. I wish it was possible to get a nice looking index and syntax coloring too.

As strange as it might sound, having module documentation in pdf makes it much easier for "corporations" than other formats.


Pod-ProjectDocs (0.34) ****

Very nice tool that lets you look at how your documentation will look like on CPAN before uplooading it.

Getting syntax hilighting to work again would make it even better.

Math-Expression-Evaluator (0.0.2)

What can this module do that Math::Symbolic doesn't?

Exporter-Tidy (0.07)

This module doesn't seems to do anything Sub::Exporter doesn't. In that case it would a waste of time.

Could the module author please give a comparison with Sub::Exporter.

I don't understand the speed comparison. What's the global impact the load time reduction on any application larger than 5 lines of code.


Readonly (1.03) *****

Very nice. use constant was a real pain. The best tip in PBP.

install Readonly::XS if you can.


Text-Pluralize (1.1) *****

Simple,straight forward,useful.

I'm never doing plurals by hand again.


Test-PerlTidy (20070903) ****

I would have like to see this test module in the authors test suite but Test::PerlTidy is his latest module so he escapes till his next module is released :)

I dislike the 'run_test()' name as it so generic it's almost sure someone else will use the same bad name. This forces me to have a whole test file just for 2 lines (which is acceptable)

Lot's of people will not like this module but that's OK as they don't need to use it. As for the PerlTidy people, they have no (good) excuses for not using this module.


Benchmark-Stopwatch (0.03) ****

This module does what Devel::Timer does but in a slightly different way. I would have like the authors to make a single module that puts together the best part of each module.

This is a good addition to the developers toolbox.


Devel-Timer (0.04) ****

I believe most of the time this would be used to time individual actions not compare the time spend in each action. Most would use benchmarking for that. This make the default sorting a bit unnatural. I would have preferred to see a chronological list as default (or at least available).

Also the labels "x -> y" may be useful but I believe "x" would have been less clutter.

I hope next version will have those as options or default. Still this is a practical module for adhoc timing without having to handle the boilerplate.

Test-Fixme (0.01) *****

Although the only test says 'failed', this module works perfectly well. Todo, Fixme, whatever you use to remind you you should do stuff in your code are extremely valuable. Those do not replace error handling systems or requirements but are a simple and powerful complement. This module let's you use the mechanism but reminds you if you haven't done your job properly.

Being able to choose your 'magic word' makes this module easy to use.

My module template contains Test::Fixme by default. It has stopped me more than once from sending a module to CPAN that wasn't ready yet.


Debug-Smart (0.004)

This is a review not a rating.

IMHO, the module name is completely wrong. None of the parts qualify.

"Debug::Smart - Debug messages for smart logging to the file" so this has but little to do with debugging but more with logging.

"Debug::Smart provides debug methods that is easy to use". So it makes things easy by guesses what log file to use.

My favorit dumper is missing (Data::TreeDumper) but that's OK :)

Evaluating the presence of a module everytime one logs something is a bit overkill (I do the same mistake sometimes). Either remember if the module is installed or create a closure at setup time.

Test-Block (0.11) *****

Yet another excellent test module by Adrian Howard. It let's you keep you sanity when you start getting lots of tests. The ability to have blocks with separate tests really helps when you have complex setup and lots of tests.It also helps by visually separating the tests.

it's also nice to not have to update the plan miles away but instead close to the modified/added tests.

if you find your test files are cluttered, using this module is definitely the first step to take.

Lexical-Persistence (0.97) *****

Bad, bad, bad. this is exactly why people think Perl is weird. But it's also exactly why we love it :). This is a great module which deserves a less confusing documentation.

This article was helpful:

POD::Tested, implementation would have been much more difficult without Lexical::Persistence magic.

Great work.

Devel-PiMPx (0.8.0) *

a module is as good as its documentation. This one had a mouth watering name but was very disappointing as it's completely undeocumentated. it's even hard to try to imagine what it could do.

Sort-Naturally (1.02) *****

A very easy to use module that does what you would naturally consider right ( naturally meaning what you most likely have been taught to do). Don't bother writing your own sorting if this one fits the bill.

A look at the code shows a strange construct but I guess the author had good reasons (speed?). Anyway I'm interrested in how to use it not how it is build and using it is simple.

Data-Hexdumper (1.3) *****

Excellent module, simply does what you expect. The setup options are not many but complete enough for 90% of the dumping jobs

I've been using for some time now and I never dump hex values by hand anymore.

PerlBuildSystem (0.43.290)

Yes the licence is restrictive. If you want to make smarter land mines or missiles, do it but use something else then PBS. It's interresting to see that you just extract what you want from the licence. The last paragraph could be an interresting read. As for the typos, not everybody is born English speaker but I will verify it.

The documentation sucks, I write it myself in the, sucky, documentation.

Non portable? so you actually used it and find it was not portable. I'd be very glad to see a technical test report. Then I'll try to understand how I could get it to work on Linux and Windows.

Thank you for the reviews, even negative one are carefully read.

I will mark the next release as a developer's release.

Cheers, Nadim

Test-Exception (0.24) *****

A "Must" module if you use die or carp in your code. This test module will be of great help, no more playing with eval.

I only wished 4 of the 6 provided functions would be removed from the API. lives_ok, IMHO, makes little sense and dies_ok is plain wrong. it's
easy to make a mistake and have a test pass a dies_ok while the real error is not the one documented in the message. I'd recommend to _not_ use dies_ok but to only use the superior throws_ok.

Sub-Install (0.924) *****

This another excellent module by Ricardo. It's much cleaner than playing with globs. The interface got 3 stars because of the two following , minor, points:

- I dislike having to curly bracket my arguments without reason

- I'd like to know if I have overridden a sub when silently overriding it

This module is so basic, I believe it should be CORE.

Opt (0.1.1) *

Three things were good with this module:

1/ finally someone who understands that parsing options does not have to manipulate @ARGV directly.

2/ some people have real cool names

3/ the Valley of flowers looks real nice

Except those, there's nothing to keep.

It's always nice to see a new perl module author (we need more of those) but not as nice to see all the errors they make.

The name says _absolutely_ nothing and it should be under the GetOpt namespace. The documentation is no documentation. There are no tests and there's some weird reference to 'nmake'!!!

"This module can handle any command-line interface" says the documentation but I wouldn't handle the module with fireproof gloves.

I messed my first perl module miserably. It takes time and energy to do quality work. CPAN is not, IMHO, a repository for whatever 2 mn hack happends to be on you desktop. Do yourself a favor remove the module from CPAN and when you get it right , tested and documented, I'll be very happy to give you a top rating.

Sub-Exporter (0.972) *****

Excellent! I love this new breed of modules. Modern, well thought.

Text-ChaSen (1.04) *

Text below is intentionaly written in bad French (look at the module to understand why).

Encore une fois un module qui pourrait etre fort interessant et qui ne serat utliser que par son auteur et trois collegues. En regle generale, la documentation des modules est mauvaise ; cette fois ci elle est en Japonais (une langue charmante mais parlee par seulement 4% de la population mondiale et probablement pas plus de programeurs Perl). Je note que le copyright est en Englais!

EasyTool (1.0.4) *

Simply put, CPAN is not the bin bucket.We already have more than enough good modules ideas with bad quality or documentation. This kind of "nohead-notail" module belongs somewhere else.

Devel-EvalContext (0.07) *****

Excellent idea that could make it easier to write plugins.

I would have like to see more tests (but at least there _are_ tests). The documentation got 1 because it badly describeq what the module does. Run doesn't take argument to specify the environment. Also, "Hints" are said to be set to zero; I would have liked to know what a "hint" is in this case.

Perl-Dist-Vanilla (7) *****

Life saver on non optimal platform.

Syntax-Highlight-Engine-Kate (0.01) *****

Great job! I might even throw away my own perl hilighter.

File-Tools (0.05) *****

A good idea. I always wondered why PPT wasn't implemented as modules. File-Tools might be the answer. I would also have like to see OS Independence be taken into account.


Brackup (0.71) *

Another promissing module (judging by the sub modules names) that is made completly worthless by the lack of documentation. It's not even stating what the goal of htis is.

I really hope to put a 5 stars on the next (documented) version.


Digest-MD5-File (0.04) *****

Should be part of Digest::MD5.

Proc-Fork (0.2) *****

Well though and well documented. The examples are useful.


Acme-NoTalentAssClown (0.01) *****


Tie-Formatted (0.02) *

the only thing that is right in this module is the reference to "Interpolation'. The mistakes are:

- the documentation doesn't state why one should use this module instead for "Interpolation"
- The author should have cooperated with "Interpolation" author is something was missing there
- the name space could have been close to "Interpolation" so users can find modules easily

all above are administrative "errors" and don't reduce the utility of the module, if any, above what "Interpolation" provides.

HTTP-Server-Simple (0.15) *

Yet another very good module that will not be used by many because of bad documentation and unexisting examples.

I'd give this module 5 stars if it was usable.

I'm looking forward to the next version.

Devel-FastProf (0.04) *****

This gives me back the envy to profile.


Devel-CallStack (0.11) *****

Excellent idea and complement to profiling modules.

PPerl (0.25) *****

Excellent idea! 10% prestanda added to my build system (for the test build, 0.15s won) by adding a simple letter in a script.

Devel-XDebug (0.0.1) *

The documentation is minimal, bad and wrong.

The tarball is corrupt.

The author writes "This module is absolute stable. You may use it not fearing." for version version 0.0.1. which in itself is a feat but it loops for ever on the first test I run.

The output looks bad, real bad.

Worst dump module on CPAN. Show some mercy and remove it please.

Data-Dumper-Simple (0.06) ****

Excellent idea and time saver. This should be bundled with Data::Dumper.

File-Find-Wanted (0.01) **

Yet another attempt to simplify File::Find that almost succeeds. I also dislike the interface of File::Find. This module does what its name advertises name but I would have like to see a module that:

1/ Returns files in directories. No sub, no filter, no wanted.

2/ takes the options, if any, as named arguments.

3/ that have options, if any, closely matching "find" so we don't need to learn yet another api

4/ Let Perl be Perl:
@wanted_files = map{ -f && /\.c$/} find(@directories) ;

I'm looking forward to version 0.02

File-Wildcard (0.04) *

The interface is heavy, the code does not work and the author's mail address bounces. Pity, the idea was a good one. I hope this will get better in future releases.

Inline-Java (0.48_94) *****

This module is the most active Inline module. The support is top class. I wish the other Inline modules were the same. I hope to see an Inline::Javascript based on Inline::Java soon. Startup time is a killer if you run very small scripts (around the same time as perl loading) but no problem if you run anything that takes more than a few seconds to complete.

Test-Inline (0.16) *****

Simple, Excellent.

Prima (1.31) *****

Excellent idea.

I've been looking for this very long. There is a little threashold mainly due to the documentation that needs some serious work to be usable; it works fine as a reference though.

I didn't get the feeling I was using an alien module but something part of Perl.

I hope this module will gain popularity as it deserves it.