Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.
The build process for the next version of Bricolage was becoming too complicated. Because we want it to be considerably easier to install, we're putting a lot of effort into ensuring that everything "just works." My code was getting too complex handling all of the rules so we're making the switch to a DFA engine and simply describing what to do when particular conditions occur. Unfortunately, DFA::Simple has a rather confusing interface and even after reading the Perl.com article about it I didn't quite "get" it. That led me to rewrite the interface to something I can actually use. Here's how to play ping-pong with a state machine:
my ($goto, $count) = ('', 0);
my %state_machine = (
ping => {
enter => sub { $goto = 'pong' },
leave => sub { warn "leaving state 'ping'" },
goto => [
# goto when and do this
pong => [sub {'pong' eq $goto}, sub {$count++}],
],
},
pong => {
enter => sub { $goto = 'ping' },
leave => sub { warn "leaving state 'pong'" },
goto => [
ping => [sub {'ping' eq $goto}, sub {$count++}],
]
}
);
my $dfa = Bric::Util::DFA->new(
\%state_machine,
'ping', # state to start in
sub {$count >= 20} # done when true
);
$dfa->next_state while ! $dfa->done;
Yeah, it needs some work, but it's much easier for me to understand.
DFA Build Process 0 Comments More | Login | Reply /