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->(); }