package Demo; use Moose; has test => (is => 'rw', isa => 'ArrayRef'); sub check { $self->test(()); } #### $ perl -c pm_1201774_moose_demo.pm Global symbol "$self" requires explicit package name (did you forget to declare "my $self"?) at pm_1201774_moose_demo.pm line 8. pm_1201774_moose_demo.pm had compilation errors. #### sub check { my ($self) = @_; $self->test(()); } #### $ perl -c pm_1201774_moose_demo.pm pm_1201774_moose_demo.pm syntax OK #### package Demo; use Moose; has test => (is => 'rw', isa => 'ArrayRef'); sub check { my ($self) = @_; $self->test(()); $self->test()->[0] = 'X'; } package main; Demo::->new->check; #### $ perl -c pm_1201774_moose_demo.pm pm_1201774_moose_demo.pm syntax OK $ perl pm_1201774_moose_demo.pm Can't use an undefined value as an ARRAY reference at pm_1201774_moose_demo.pm line 12. #### $self->test([]); #### $ perl -c pm_1201774_moose_demo.pm pm_1201774_moose_demo.pm syntax OK $ perl pm_1201774_moose_demo.pm $ #### ... Fields ... isa => 'HashRef' ... $self->Fields({}); #### $Cnt = scalar $self->Fields; #### $ perl -E 'my $x = {a=>1,b=>2}; say scalar $x; say scalar keys %$x' HASH(0x7ffe120040b0) 2 #### $self->FieldCount = $Cnt; $self->Changed = -1; #### ... FieldCount ... isa => 'Num' ... ... Changed ... isa => 'Boolean' ... #### ... Can't modify non-lvalue subroutine call at ... #### $ perl -E 'my $x = -1; say $x ? "true" : "false"' true