FLINTSTONES -- BARNEY, FRED, WILMA JETSONS -- MAX, TONY, WILMA SIMPSONS -- LISA, BARNEY, WILMA, HOMER ALCATRAZ -- ELIJAH, MAX, WILMA #### my %is_in_show = ( MAX => [ 'JETSONS', 'ALCATRAZ' ], WILMA => [ 'FLINTSTONES', 'JETSONS', 'SIMPSONS', 'ALCATRAZ' ], HOMER => [ 'SIMPSONS' ], ELIJAH => [ 'ALCATRAZ' ], ... ); #### while () { chomp; my ($show, $names) = split(/ -- /); my @names = split(/, /, $names); foreach my $name (@names) { push(@{$is_in_show{$name}}, $show); } } #### use strict; use warnings; my %is_in_show; while () { chomp; my ($show, $names) = split(/ -- /); my @names = split(/, /, $names); foreach my $name (@names) { push(@{$is_in_show{$name}}, $show); } } foreach my $name (keys %is_in_show) { my $shows = $is_in_show{$name}; my $num_shows = @$shows; my $s = $num_shows == 1 ? '' : 's'; print("$name appears in $num_shows show$s: ", join(' ', @$shows), "\n"); } __DATA__ FLINTSTONES -- BARNEY, FRED, WILMA JETSONS -- MAX, TONY, WILMA SIMPSONS -- LISA, BARNEY, WILMA, HOMER ALCATRAZ -- ELIJAH, MAX, WILMA