Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re: Are state machines just for parsing?

by lachoy (Parson)
on Dec 08, 2004 at 21:32 UTC ( #413336=note: print w/replies, xml ) Need Help??

in reply to Are state machines just for parsing?

This is actually what the Workflow module does. (I think someone else mentioned it too.) You can create:

  • Actions to move from one state to another (or not change state at all)
  • Conditions to see whether the current environment can execute an action (which changes state).
  • Validators to check data coming into the system

All of these are simple Perl classes, and because there's a 'context' moving data into and out of the workflow it doesn't care where it's run, and neither do your classes.

I gave a presentation on it a couple months ago to the Pittsburgh Perlmongers that might be helpful, and it comes with working examples, decent docs, some tests, etc.

M-x auto-bs-mode

  • Comment on Re: Are state machines just for parsing?

Replies are listed 'Best First'.
Re^2: Are state machines just for parsing?
by samtregar (Abbot) on Dec 08, 2004 at 22:03 UTC
    That's a cool presentation. And the module looks great... except, why do I have to program Perl inside an XML file? This makes my skin crawl:

    <workflow> <type>myworkflow</type> <state name="INITIAL"> <action name="upload file" resulting_state="uploaded" /> </state> <state name="uploaded" autorun="yes"> <action name="verify file" resulting_state="annotate"> <!-- everyone other than 'CWINTERS' must verify --> <condition test="$context->{user} ne 'CWINTERS'" /> </action> ...

    I'd be much happier with:

    my $workflow = Workflow::Generator->new(type => "myworkflow"); $state = $workflow->add_state(name => "INITIAL"); $state->add_action(name => "upload file", resulting_state => "uploa +ded"); $state = $workflow->add_state(name => "uploaded", autorun => "yes") +; $state->add_action(name => "verify_file", resulting_state => "annot +ate"); $condition = $state->add_condition(test => \&check_file);

    It's more conscise and all the power of Perl is available for making repetitive structures from common data. If I ever decided to use Workflow I think Workflow::Generator would be my first project.


      Well, the "perl in XML" part is entirely optional and is actually a recent addition. But I like the idea of creating it programmatically and it should be pretty easy, actually. I might swipe this for later -- with credit, of course...

      M-x auto-bs-mode