package Class2; our $pckg_vars = __PACKAGE__; sub new(){ my $class=$_[0]; my $s = "Base"->new(params).... my $s->{$pckg_vars} = {}; #'local' class var space bless $s,$class; return $s; ...} package Class3; our $pckg_vars => __PACKAGE__; sub new(){ my $class=shift; my $s = Class2->new(params)... my $s->{$pckg_vars} = {}; #class3 local vars bless $s,$class; return $s; ....}