use strict; use warnings; use feature 'say'; { package Tree; use Moose; has health_level => ( is => 'rw', isa => 'Int', ); sub grow_leaf { my $self = shift; Leaf->new(tree => $self); # pass $self on to child } } { package Leaf; use Moose; has tree => ( is => 'bare', handles => ['health_level'], ); } my $t = Tree->new(health_level => 100); my $l = $t->grow_leaf; say $l->health_level; # 100 $t->health_level(90); say $l->health_level; # 90