I have written a Moose object module using the following attribute:
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: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 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).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!
Thank you,
Dave
In reply to Setting a custom hash accessor handle in Moose attribute by daverave
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |