$ cat ChainOfResponsibilityIf.pm package PM::1081903::ChainOfResponsibilityIf; use Moose::Role; requires 'handleRequest'; requires 'addHandler'; 1; #### $ cat CoRHandler.pm package PM::1081903::CoRHandler; use Moose; use Carp qw(confess croak); with 'PM::1081903::ChainOfResponsibilityIf'; sub handleRequest { 1 } sub addHandler { 1 } sub _processCommand { 1 } 1; #### $ cat GenericCommandHandler.pm package PM::1081903::GenericCommandHandler; use Moose; extends 'PM::1081903::CoRHandler'; override '_processCommand' => sub { }; 1; #### $ cat GCHSuccessor.pm package PM::1081903::GCHSuccessor; use Moose; has 'successor' => ( is => 'rw', isa => 'PM::1081903::ChainOfResposibilityIf', ); 1; #### #!/usr/bin/env perl use strict; use warnings; use PM::1081903::GenericCommandHandler; use PM::1081903::GCHSuccessor; my $gchs = PM::1081903::GCHSuccessor::->new( successor => PM::1081903::GenericCommandHandler::->new() ); #### Attribute (successor) does not pass the type constraint because: Validation failed for 'PM::1081903::ChainOfResposibilityIf' with value PM::1081903::GenericCommandHandler=HASH(0x7fa22882a610) (not isa PM::1081903::ChainOfResposibilityIf) at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Meta/Attribute.pm line 1279. Moose::Meta::Attribute::verify_against_type_constraint('Moose::Meta::Attribute=HASH(0x7fa2292b89e0)', 'PM::1081903::GenericCommandHandler=HASH(0x7fa22882a610)', 'instance', 'PM::1081903::GCHSuccessor=HASH(0x7fa2288525c8)') called at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Meta/Attribute.pm line 1266 Moose::Meta::Attribute::_coerce_and_verify('Moose::Meta::Attribute=HASH(0x7fa2292b89e0)', 'PM::1081903::GenericCommandHandler=HASH(0x7fa22882a610)', 'PM::1081903::GCHSuccessor=HASH(0x7fa2288525c8)') called at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Meta/Attribute.pm line 536 Moose::Meta::Attribute::initialize_instance_slot('Moose::Meta::Attribute=HASH(0x7fa2292b89e0)', 'Moose::Meta::Instance=HASH(0x7fa228843e80)', 'PM::1081903::GCHSuccessor=HASH(0x7fa2288525c8)', 'HASH(0x7fa2290d5108)') called at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP/Class.pm line 525 Class::MOP::Class::_construct_instance('Moose::Meta::Class=HASH(0x7fa22929a2e8)', 'HASH(0x7fa2290d5108)') called at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP/Class.pm line 498 Class::MOP::Class::new_object('Moose::Meta::Class=HASH(0x7fa22929a2e8)', 'HASH(0x7fa2290d5108)') called at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Meta/Class.pm line 284 Moose::Meta::Class::new_object('Moose::Meta::Class=HASH(0x7fa22929a2e8)', 'HASH(0x7fa2290d5108)') called at /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Object.pm line 28 Moose::Object::new('PM::1081903::GCHSuccessor', 'successor', 'PM::1081903::GenericCommandHandler=HASH(0x7fa22882a610)') called at ./pm_example.pl line 9 #### isa => 'PM::1081903::ChainOfResposibilityIf', #### isa => 'PM::1081903::CoRHandler', #### print $gchs->successor->handleRequest(), "\n";