{ package TwoFaceRefs; use overload '%{}' => \&getByKey; my %idx = qw(name 2); # And probably some more :-) sub getByKey { # Likely faster to return a tied hash, # but you get the idea ... my $obj = shift; return {map{ $_ => $obj->[$idx{$_}] } keys %idx}; } sub dsfmm { # Assuming we get an arrayref: my $obj = do_stuff_from_my_module(); bless $obj, "TwoFaceRefs"; return $obj; } } my $obj = TwoFaceRefs::dsfmm(); my $name = $obj->[2]; # # or # my $name = $obj->{name};