sub GET::AUTOLOAD { $GET::AUTOLOAD =~ /::(\w+)$/; $_[0]->{ $1 }; }
my $h = { foo => 1, bar => 2, doz => 3 };
bless $h, 'GET';
say $h->foo, $h->bar, $h->doz;
####
my $h = { foo => 1, bar => [ 2, { doz => 3 } ] };
getter($h);
say $h->foo->[1]->doz; # 3
####
use Scalar::Util qw();
sub GET::AUTOLOAD { $GET::AUTOLOAD =~ /::(\w+)$/; $_[0]->{ $1 }; }
sub getter {
my $h = $_[0];
my $r = Scalar::Util::reftype($h) or return;
if ($r eq 'ARRAY') {
getter($_) for @$h;
} elsif ($r eq 'HASH') {
bless $h, 'GET';
getter($h->{$_}) for keys %$h;
}
$h;
}