package Father; use strict; use warnings; use 5.010; sub new { my $class = shift; state $shared_data = {}; my $self = { 's' => $shared_data }; bless $self, $class; } sub s { return $_[0]->{s} } 1; #### package Daughter; # or Son use strict; use warnings; use 5.010; use parent qw(Father); 1; #### use strict; use warnings; use lib '.'; use Daughter; use Son; my $d = Daughter->new(); my $s = Son->new(); $d->s()->{'news'} = 'bad'; print $s->s()->{'news'}."\n"; my $d2 = Daughter->new(); print $d->s()->{'news'}."\n"; $d2->s()->{'news'} = 'bad123'; print $s->s()->{'news'}."\n"; print $d->s()->{'news'}."\n"; print $d2->s()->{'news'}."\n"; # prints bad bad bad123 bad123 bad123 #### my $shared_data = {}; my $father = Father->new($shared_data); my $d = $father->new_daughter(); ...