use warnings; use strict; use Data::Dump; { package Foo; use Moose; has 'Fields' => (is => 'rw', isa => 'HashRef'); } my $foo = Foo->new(Fields=>{}); $foo->Fields->{x}++; dd $foo->Fields; # prints { x => 1 } #$foo->Fields = 0; # wrong, fails $foo->Fields({}); dd $foo->Fields; # prints {}