$class->meta->rebless_instance($object); #### class Teacher { method teach () { ... } } class ClassRoom { has teacher => ( is => 'rw', handles => ['teach'], clearer => 'vacate', ); } my $room1 = ClassRoom->new; eval { $room1->teach; # dies (no teacher!) }; # Instead of adding a role, # give the classroom an object # that it can delegate to... # $room1->teacher( Teacher->new ); $room1->teach; # ok! # Instead of removing the role, # remove the object that's being # delegated to... $room1->vacate; eval { $room1->teach; # dies (no teacher!) };