Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Are state machines just for parsing?

by lachoy (Parson)
on Dec 08, 2004 at 21:32 UTC ( [id://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.

Chris
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.

    -sam

      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...

      Chris
      M-x auto-bs-mode

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://413336]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2025-03-27 17:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    When you first encountered Perl, which feature amazed you the most?










    Results (70 votes). Check out past polls.

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.