sub lookup { my ($type, $ref) = @_; if ($type eq 'typeA') { return $ref->{key1}[3]{key2}; } elsif ($type eq 'typeB') { return $ref->{key3}; } elsif ($type eq 'typeC') { return $ref->[1]{key4}; } # ... } #### my @LoANY = ( { type => "typeA", data => { key1 => [0,1,2, { key2 => "Value1" } ] } }, { type => "typeB", data => { key3 => "Value2" } }, { type => "typeC", data => [0, { key4 => " Value3" } ] }, # ... ); #### for my $elem (@LoANY) { print lookup($elem->{type}, $elem->{data}), "\n"; } #### Value1 Value2 Value3 #### my %map = ( typeA => sub { $_[0]->{key1}[3]{key2} }, typeB => sub { $_[0]->{key3} }, typeC => sub { $_[0]->[1]{key4} }, # ... ); #### for my $elem (@LoANY) { print $map{$elem->{type}}->($elem->{data}), "\n"; }