use strict; use warnings; { package parent 0.000001; use Moose; has 'changing_data' => (is => 'rw', default => ''); sub set_data { my $s = shift; $s->changing_data('foo foo foo'); } sub create_child { my $s = shift; my $data = shift; return child->new(changing_data => $data); } } { package child 0.00001; use Moose; extends 'parent'; } my $p = parent->new(); $p->set_data; my $child = $p->create_child(sub{$p->changing_data()}); print $child->changing_data->(); $p->changing_data('bar bar bar'); print "\n"; print $child->changing_data->();