sub search_idref { my $haystack = shift; my $needle = shift; my @pitchfork = sort keys %$haystack; my @solutions; for my $p (@pitchfork) { push @solutions, $p if grep { $_->{'idref'} eq $needle } @{$haystack->{$p}->{'edge'}}; } return @solutions; } print Dumper search_idref( \%s, 's241_506' );