package My::Parent; our %ClassData; my $ClassCount; BEGIN { %ClassData= ( this=>"that", foo=>"baz", count=>\$ClassCount ) } sub new { my $this= shift; my $class= ref($this) || $this; my $classData; { no strict 'refs'; $classData= \%{$this."::ClassData"}; } #... $self{foo}= $classData->{foo}; ++${$classData->{count}}; return $self; } package My::Son; use base "My::Parent"; *{ClassData}= \%My::Parent::ClassData; package My::Daughter; use base "My::Parent"; our %ClassData; my $DaughterCount; BEGIN { %ClassData= %My::Parent::ClassData; $ClassData{foo}= "bar"; $ClassData{count}= \( $DaughterCount= 0 ); }