package Foo; use strict; use warnings; sub new{ my $class = shift; return bless {foo => 123}, $class; } # public sub foo{ my $self = shift; return $self->{foo}; } package Foo::Bar; use strict; use warnings; @Foo::Bar::ISA = qw(Foo); # Overload sub new{ my $class = shift; return bless {}, $class; } package main; use strict; use warnings; use Data::Dumper; my $foo = Foo->new; my $bar = Foo::Bar->new; print Dumper $foo, $bar; print $bar->foo; # Use of uninitialized value ...