package Foo; sub new { my ($class, @args) = @_; bless \@args, $class } sub wonk { my $self = shift; $self->_fiddle(@_); } sub _fiddle { my $self = shift; return map { scalar reverse $_ } @_; } package Bar; @ISA = 'Foo'; sub thing { my $self = shift; $self->_fiddle(@_); } sub _fiddle { my ($self, @args) = @_; return map { ++$_ } @args; } #### # in package Foo sub wonk { my $self = shift; _fiddle($self, @_); } #### package Bar; use Foo; sub new { my ($class, %args) = @_; $args{_foo} = Foo->new; bless \%args, $class; } sub wonk { my $self = shift; $self->{_foo}->wonk(@_); # delegation! }