Please try to reduce your code down to the minimum needed to reproduce the issue - see SSCCE. Like this:
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 {}
The problem is that $foo->Fields is a method call, to which you cannot assign anything ($foo->Fields = ...;) by default; it's as if you had written sin($pi) = 123;. The normal way to set an object property is to pass its new value as an argument to the method, as I showed above: $foo->Fields({});
There is a way to make methods that you can assign to in Perl, Lvalue subroutines, but at least in my experience they seem to be pretty uncommon. I suggest you stick to normal setter calls.
Also, let me repeat Mr. Muskrat's suggestion to look into DBIx::Class instead of reinventing that wheel.
In reply to Re: Clearing a hash reference
by haukex
in thread Clearing a hash reference
by jorba
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |