package A; sub new { my ($class, %args) = @_; bless \%args, $class; } # access foo sub _foo { return shift->{foo}; } sub printFoo { my $self = shift; return $self->_foo; } package B; @B::ISA = qw/ A /; # access foo OVERLOAD sub _foo { return shift->{foo} + 1; } package main; my $ob = B->new( foo => 23 ); print $ob->printFoo; # A: 23, B: 24