Dear Monks,
I have written a Moose object module using the following attribute:
package MyObj;
use Moose;
use namespace::autoclean;
# some irrelevant attributes and methods...
has 'custom_fields' => (
traits => [qw( Hash )],
isa => 'HashRef',
builder => '_build_custom_fields',
handles => {
custom_field => 'accessor',
has_custom_field => 'exists',
custom_fields => 'keys',
has_custom_fields => 'count',
delete_custom_field => 'delete',
},
);
sub _build_custom_fields {
return {};
}
__PACKAGE__->meta->make_immutable;
1;
I would like to change the default hash accessor, such that an attempt to read from a non-existing key will croak, while writing (setting) a non-existing key will work as usual. That is:
my $obj = MyObj->new();
$biorange->custom_field('foo', 23); # OK
my $foo = $biorange->custom_field('foo'); # OK
my $foo = $biorange->custom_field('bar'); # should croak!
I guess I should replace the accessor with my own code (?), but I'm not sure what interface I should follow (i.e. what is the accessors prototype and how do I get access to the actual hash).
Thank you,
Dave