my %map = ( typeA => sub { $_[0]->{key1}[3]{key2} }, typeB => sub { $_[0]->{key3} }, typeC => sub { $_[0]->[1]{key4} }, # ... ); #### $$obj{cost} <--type1 $$obj{priceList}{price} <--type2 $$obj{priceList}{price}{value} <--type3 ...etc..