2010-11-12 35 views
1

我有一個屬性的穆斯對象,它是哈希:我該如何才能在訪問一個不存在的關鍵字時深入Hoh作爲Moose屬性?

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

UPDATE 也許某種程度上使用Data::Diver

回答

1

通常我會說,如果你有一個複雜的數據結構,你想以面向對象的方式處理,你應該把數據結構變成一個對象樹。有了駝鹿強制,這也可以相當透明地建模。

0

你可以看看通過autovivification關閉autovivification。

您可以通過unimport例程'exception',使其死亡,它可能會自動生成。

相關問題