in reply to Clearing a hash reference
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.
|
|---|