package BasicX::AAA1; sub new { my($class, $delegate) = @_; my $self = {}; bless $self, $class; $self->delegate($delegate || BasicX->new()); return $self; } sub delegate { my $self, $new_delegate_instance) = @_; $self->{_delegate} = $new_delegate_instance if defined $new_delegate_instance; return $self->delegate; } sub delegated_method { my $self = shift; if $self->delegate->can('delegated_method') { $self->delegate->delegated_method(); } else { # handle it yourself } }