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).
I started with what I thought was a simple problem and decided to try FSA::Rules. The problem quickly became more complicated than I had anticipated, but FSA::Rules did everything I needed.
Helpful error messages and debug options.
A example of a more complicated problem would have helped me get up and running more quickly.