package Foo; use base qw{Class::StructAccessors}; __PACKAGE__->mk_struct_accessors({ A => { B => 'C' }, D => { E => { F => 'G' } }, ## Z => 'G', # Duplicate test ## X => [1,2,3], # Bad type test ## N => do {my $cycle = {}; $cycle->{M} = $cycle; $cycle;}, # Cyclic test }); package main; use Foo; my $obj = bless { A => { B => {'C' => "It's hello from C"}, }, D => { E => { F => {'G' => "G'day from G"} } } }, 'Foo'; print "C:".$obj->C."\n"; print "G:".$obj->G."\n";