>perl -wMstrict -le "my %families = ( flintstones => { dad => 'fred', mom => 'wilma', kid => 'bambam', }, simpsons => { dad => 'fred', mom => 'marge', kid => 'bart', sis => 'lisa', }, ); use Test::More 'no_plan'; my @got; is @got = get_members(\%families => kid => 'bart'), 1, 'got bart'; note qq{families with bart: '@got'}; is @got = get_members(\%families => dad => 'fred'), 2, 'got freds'; note qq{families with freds: '@got'}; is @got = get_members(\%families => mom => 'june'), 0, 'no junes'; note qq{families with june: '@got'}; is @got = get_members(\%families => sis => 'lisa'), 1, 'got lisa'; note qq{families with lisa: '@got'}; is @got = get_members(\%families => xxx => 'yyy'), 0, 'no xxx'; note qq{what's an xxx? '@got'}; sub get_members { my ($hr_families, $member, $name) = @_; return grep $hr_families->{$_}{$member} eq $name, grep exists($hr_families->{$_}{$member}), keys %$hr_families ; } " ok 1 - got bart # families with bart: 'simpsons' ok 2 - got freds # families with freds: 'simpsons flintstones' ok 3 - no junes # families with june: '' ok 4 - got lisa # families with lisa: 'simpsons' ok 5 - no xxx # what's an xxx? '' 1..5