use feature ':5.16';
use strictures;
use Door;
use Moose::Util qw( apply_all_roles );
my $main_door = Door->new;
# The Door is Closed
$main_door->knock; # knock knock
# Open it
apply_all_roles($main_door, 'Opened');
$main_door->knock; # just come on in!
# Close it
apply_all_roles($main_door, 'Closed');
$main_door->knock; # knock knock
# Bug ??
say 'Why does this not print ??'
if $main_door->DOES('Closed');
####
package Door;
use Moo;
use feature ':5.16';
use Moose::Util qw( apply_all_roles );
sub BUILD {
apply_all_roles($_[0], 'Closed');
# default State at construction
}
sub knock {
say 'DEFECT: a door should never be nor opened nor closed';
# This method will be overriden by the Roles
# (should never be printed)
}
1;
####
package Closed;
use Moose::Role;
use feature ':5.16';
sub knock {
say 'knock knock';
}
1;
####
package Opened;
use Moose::Role;
use feature ':5.16';
sub knock {
say 'just come one in!';
}
1;