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!
}