daverave has asked for the wisdom of the Perl Monks concerning the following question:
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Setting a custom hash accessor handle in Moose attribute
by stvn (Monsignor) on Oct 24, 2010 at 23:35 UTC | |
by daverave (Scribe) on Oct 25, 2010 at 17:27 UTC |