Class-Enumeration
view release on metacpan or search on metacpan
t/lib/TurnstileStateMachine.pm view on Meta::CPAN
## no critic ( ProhibitMultiplePackages )
use strict;
use warnings;
# https://en.wikipedia.org/wiki/Finite-state_machine
package TurnstileStateMachine;
use Exporter qw( import );
use Class::Enumeration::Builder { export => 1 }, qw( Locked Unlocked );
package TurnstileStateMachine::Locked;
use Carp qw( croak );
sub do_something {
my ( $self, $input ) = @_;
return __PACKAGE__->value_of( 'Unlocked' ) if $input eq 'coin';
return $self if $input eq 'push';
croak "Wrong input '$input', stooped";
}
package TurnstileStateMachine::Unlocked;
use Carp qw( croak );
sub do_something {
my ( $self, $input ) = @_;
return __PACKAGE__->value_of( 'Locked' ) if $input eq 'push';
return $self if $input eq 'coin';
croak "Wrong input '$input', stooped";
}
1
( run in 0.953 second using v1.01-cache-2.11-cpan-39bf76dae61 )