use strict; use warnings; my $individuals = {}; my $coordinates = {}; # Fill the hashes associated with $individuals and $coordinates # in subroutines so that # $$coordinates{$group}{$id}{$stage}{"coords"}{$coord_no} = $value print_coords($individuals, $coordinates); sub print_coords { my ($individuals, $coordinates) = @_; foreach my $group (sort keys %$individuals) { foreach my $id (sort keys %{$$individuals{$group}}) { INDIVIDUAL: foreach my $stage (sort keys %{$$individuals{$group}{$id}}) { # here the test if (!(%{$$coordinates{$group}{$id}{$stage}{"coords"})) { next INDIVIDUAL; } # print individual and coordinate information } } } }