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.
It works and it is small.
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.
Amazon-SQS-Simple is really simple to use. A couple of minutes reading the Pod and getting acquainted with the Amazon SQS is enough to get an working example.
The only thing that I missed was an updated Pod, which seems to be (unfortunately) outdated regarding the features the distribution already has.
For instance, quoting the Pod: “This version of Amazon::SQS::Simple defaults to work against version 2009-02-01 of the SQS API.”
Checking the code is easy to see that the defaul is “SQS_VERSION_2012_11_05”, so the Pod is outdated.
our $DEFAULT_SQS_VERSION = SQS_VERSION_2012_11_05;
our @EXPORT = qw(SQS_VERSION_2012_11_05 SQS_VERSION_2009_02_01 SQS_VERSION_2008_01_01);
Also, something that I missed is information about long pooling support or not (which seems to be available for usage, specially because Amazon-SQS-Simple is up to date with Amazon SQS spec).
The REST::Client works fine and it's easy to use.
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'm using FSA-Rules for one of my open source projects (code.google.com/p/siebel-monitoring-t... ) for parsing output and I would probably would be in trouble without this module.
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).