INITIAL_STATE SOME_STATE FINAL_STATE
+-----+ +-----+ +-----+
start--->| |---+--->| |------->| |--->accept
+-----+ | +-----+ +-----+
| |
+-------+
####
INITIAL_STATE: {
...
goto SOME_STATE;
}
SOME_STATE: {
...
if ( ... ) {
goto SOME_STATE;
} else {
goto FINAL_STATE;
}
}
FINAL_STATE: {
...
}
####
sub initial_state {
...
return some_state();
}
sub some_state {
...
if ( ... ) {
return some_state();
} else {
return final_state()
}
}
sub final_state {
...
return;
}
initial_state();
####
sub initial_state {
...
goto &some_state;
}
sub some_state {
...
if ( ... ) {
goto &some_state;
} else {
goto &final_state;
}
}
sub final_state {
...
return;
}
initial_state();
####
sub initial_state {
...
return \&some_state;
}
sub some_state {
...
if ( ... ) {
return \&some_state;
} else {
return \&final_state;
}
}
sub final_state {
...
return undef;
}
my $state = \&initial_state;
while ( $state ) {
$state = $state->();
}