use v5.14; package Part { use Moose; has foo => (is => 'ro'); has bar => (is => 'ro'); } package Whole { use Moose; has baz => (is => 'ro'); has part => ( is => 'ro', writer => '_set_part', init_arg => 0, isa => 'Part', handles => qr/.*/, ); sub BUILD { my $self = shift; $self->_set_part(Part->new(@_)); } } my $obj = Whole->new(foo => 1, bar => 2, baz => 3); print $obj->dump; say for $obj->foo, $obj->bar, $obj->baz;