I have being programming in Perl for some years already, but decided to lookup some better implementation of sets after start learning Python (which implemented is part of standard distribution).
Before that, I used hashes for the same results, which indeed I think is what the majority of Perl programmers do.
Honestly, Set::Tiny should be turned to a standard module. It is a solid implementation, easy to use and with zero dependencies. After using it I really got addicted to it when I need set operations.
I was having a real bad time with Net::SSH2 module in Windows, but after finding out this module I could happily finish my job!
The module is not only functional (something I was not being able to get with Net::SSH2, even with the most mundane commands), the interface is much easier to use.
And, as the cherry on the top, this module will give you an instance of Net::SFTP::Foreign reusing your same SSH session.
I totally recommend this module as a replacement for Net::SSH2 if you're at a Windows OS.
It seems impossible to use this distribution from CPAN. Honestly, I don't understand why it is even on CPAN.
It has dependencies of other distributions (like AptPkg::Cache) that are not available on CPAN. Of course, since they are directly related to Debian (and other based Linux distros) you can find DEB packages for them.
But it you want to use a custom perl interpreter (like one provided by Perlbrew) you're out of luck.
I wasn't able to compile AptPkg::Cache from it's sources, so I couldn't even use DhMakePerl.
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.
This project has a lot of work to be done.
Documentation is still difficult to follow.
The interface is somehow confusing.
It is not clear if the project is hosted on SourceForge or Github, so it is difficult to submit a issue.
Also, there are a lot of no answered issues in rt.cpan.org.
You definitely want to look for XML::Compile::SOAP for a Perl solution with you need to build/consume SOAP web services.
Very good module, easy to use with the expected results! Nothing else could be asked for!
But if you want to get information about inodes usage, you're not looking for Sys::Statistics::Linux::FileStats: it gets information about inodes from /proc in Linux and most probably you want that information for each mount point you have it. Documentation about this part of /proc is obscure, so I ended update using Filesys::Df for that.
It seems a good option to replace Sys::Statistics::Linux::DiskUsage current implementation with Filesys::Df to avoid a system call with "df" program.
The only complain I have about it is related to use it to read UTF-8 INI files with BOM: the module does not seem to be able to read those files, even with some different attempts of passing encoding argument to read(). The module must remove the BOM before running validations in the INI format (see String::BOM).
Documentation could also see some improvements regarding encoding options.
Since it uses LWP under it, you can customized it very easily.
The only thing that I missed was a Pod description about setting SSL options with it, but this is probably something to be checked in LWP itself. Anyway, I believe this usage is common enough to have a specific method to disable certificate checking. I solved it by doing a simple:
my $client = REST::Client->new();
$client->getUseragent()->ssl_opts( verify_hostname => 0 );
But as I said, I had to go through LWP::UserAgent to get that and well... there are a lot of options to set SSL/TLS with new() parameters, adding another one would do no harm.
I'm a strong believer that the better way to teach something is to give example: the documentation doesn't have one.
The interface is not easy to use: if I have to provide a function reference and the documentation describes the interface of it (expected parameters and return values) that means that the distribution should have at least a implementation, even if very basic.
The distribution does not includes any tests at all, which contributes for poor documentation (no examples at all).
If you want to show any activity at the terminal while working on something that takes a while to work, this distribution will work greatly!
The only issue that I had is regarding using the options rotate and time: if I disable the time with time => 0 (at least, I think this is a boolean value because the documentation does not explains it), the time count is disable but the output becames messy.
Lack of documentation is a big issue since I'm not sure which should be the expected behaviour, but disabling time count seems to cause a bug.
I must say that this is the first time that I'm using a state machine for a parser, so this reviewed is based on a newbie point of view related to state machines.
The distribution works as expected. It looks simple to use, but the lack of good examples in the documentation make it hard to create some working code. Documentation really lacks an example to GraphViz when using the graph() method. It is really cool to have such functionality but again the lack of documentation makes life harder. Looks like it needs a review anyway since GraphViz is deprecated in favour of GraphViz2.
The API is OK, but could be improved in the sense that after adding new states, code becomes harder and harder to read since the object is created with a big data references (hash and array references mixed). It would be great if the new states could be added just as new created objects (could be even greater if I could add them Perl modules in a directory and then they could be loaded during execution time).