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();
...