But
caller doesn't do what you want. Try:
sub respond_to_message_from {
my $self = shift;
my($message, $sender);
my $attitude = $self->appropriate_attitude_to($sender);
$attitude->respond_to_message_from($self,
$message,
$sender);
}
This avoids monkeying with
@ISA, which can only be a good thing.
$attitude is an example of the
Strategy Pattern. Note that I've not got an
@args parameter to this function, instead I'd expect them to be wrapped up in teh
$message object (which can be thought of as an example of the
Argument Object pattern.