package A; sub new { bless {}, shift } sub foo { 'A' } sub bar { my $self = shift; print '$self->foo() = ', $self->foo(), "\n"; print 'foo( $self ) = ', foo( $self ), "\n"; } package B; our @ISA = ('A'); sub foo { 'B' } package main; my $obj_a = A->new(); my $obj_b = B->new(); print "object A call to bar():\n"; $obj_a->bar(); print "object B call to bar():\n"; $obj_b->bar(); __END__ object A call to bar(): $self->foo() = A foo( $self ) = A object B call to bar(): $self->foo() = B foo( $self ) = A