我有一个Moose对象,其属性是hash:
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',
},
);
around 'custom_field' => sub {
my $orig = shift // confess;
my $self = shift // confess;
my $field = shift // confess;
confess "Attempt accessing non-existing custom field '$field'"
unless ( @_ or $self->has_custom_field($field) );
$self->$orig( $field, @_ );
};
他的作品很简单,一级哈希。现在,我想允许深度哈希(散列哈希哈希值),并且只要尝试访问不存在的(可能很深的)密钥,就会confess
。
更新
也许以某种方式使用Data::Diver
?
答案 0 :(得分:1)
一般来说,如果你想要以面向对象的方式处理复杂的数据结构,你应该把数据结构变成一个对象树。对于穆斯强制,这也可以相当透明地模拟。
答案 1 :(得分:0)
您可以通过autovivification
查看关闭自动审核。
您可以传递使其死亡的unimport
例程'exception'
,它可能已经自动存档。