use strict; use warnings; # Recursive function to traverse a HoH according to a # "dotted" properties path: sub getprop{ my ($properties, $path) = @_; return $properties unless $path; my ($key, @remaining_path) = split /\./, $path; return getprop($properties->{$key}, join('.' => @remaining_path)); } # Define our properties: my $mylovelydata= { 'Colour'=>'blue', 'Entries'=> { 'Flowers'=> { 'Dahlia'=>{'Smell'=>'nice',}, 'Rose'=>{'Colour'=>'red'}, } }, }; # Test the function for my $flower qw/Dahlia Rose/{ my $colour = getprop($mylovelydata, "Entries.Flowers.$flower.Colour"); $colour = getprop($mylovelydata, "Entries.Colour") unless defined($colour); $colour = getprop($mylovelydata, "Colour") unless defined($colour); print "A ${flower}'s color is: $colour\n"; } __END__ A Dahlia's color is: blue A Rose's color is: red