#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; { package My::Object; use Moose; has keys => ( is => 'ro', isa => 'ArrayRef', default => sub { [] } ); __PACKAGE__->meta->make_immutable; } my $o = 'My::Object'->new; $o->keys->[0] = 'def'; push @{ $o->keys }, 'abc'; say for @{ $o->keys };