cyphy, you got homework to do over Christmas break? Bummer!
Update: Anyway, here's my approach. Note that I do not die in the extraction function on zero members; I feel this sort of thing should be left to the caller. (Note: Older versions of Test::More don't have note.)
>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
Also: Noticed that undefined family members would generate 'Uninitialized ...' warnings; fixed. (The two grep statements could be combined into one.)
|