sub callMethod { my $self = shift; my ($method, @args) = @_; # pseudo-code only ;) (defined( $self->{buddies}->{ caller() } ) ) ? unshift @ISA, "Behaviour::Informal" : unshift @ISA, "Behaviour::Guarded" ; my @return = $self->$method(@args) if $self->can($method); # hide what we just did from the rest of our class! shift @ISA; return @return; }