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";
}