use Data::Dumper; %people=( 'Jones'=>{'name'=>'Alison', 'age'=>15, 'pet'=>'dog',}, 'Smith'=>{'name'=>'Tom', 'age'=>34, 'pet'=>'cat',}); foreach $person (keys %people) { my $person_attributes = $people{$person}; # Use Data::Dumper here to be *sure* of the data format # of the variable $person_attributes. # # printf "Person attributes: %s\n", Dumper(\$person_attributes); # Display the values ... my @attributes = values %$person_attributes; printf "Attributes: %s\n", join(",", @attributes); # ... or make use of one or more attributes ... my $age = $person_attributes->{'age'}; do_something_with_age($age); # Process this person's age # ... or process all of the attributes together do_something_with_this_person($person_attributes); }