use 5.008003; use MooseX::Declare; role Thread::Task::Role::Conduit { use MooseX::Types::Moose qw(ClassName); use Thread::Task::Types qw(Manager_T); use Carp; requires 'signal'; has manager => ( isa => Manager_T, is => 'ro', required => 0, writer => '_set_manager', predicate => '_has_manager', ); method conduit_init(Manager_T $manager) { $self->_set_manager($manager); } before signal { if (!$self->_has_manager) { croak "Can't signal without a manager"; } } } 1;