sub setFlyBehaviour { caller(0)->isa(__PACKAGE__) || confess "setFlyBehaviour is protected"; my $closure = shift; my $flyBehaviour = shift; &{ $closure }("FLYBEHAVIOUR", $flyBehaviour); } sub setQuackBehaviour { caller(0)->isa(__PACKAGE__) || confess "setQuackBehaviour is protected"; my $closure = shift; my $quackBehaviour = shift; &{ $closure }("QUACKBEHAVIOUR", $quackBehaviour); }