use strict; use warnings; my ( %individuals_by_first_name, %individuals_by_middle_name); foreach my $line () { chomp($line); my ($first, $middle, $last, $age, $sex, $location) = split(/,/, $line); my $record = [ $first, $middle, $last, $age, $sex, $location ]; push(@{$individuals_by_first_name{$first}}, $record); push(@{$individuals_by_middle_name{$middle}}, $record); } foreach my $first (sort keys %individuals_by_first_name) { foreach my $individual (@{$individuals_by_first_name{$first}}) { my ($first, $middle, $last, $age, $sex, $location) = @$individual; print "$first: $middle, $last, $age, $sex, $location\n"; } } __DATA__ first1,middle1,last1,27,M,here first2,middle2,last2,56,M,there first3,middle3,last3,30,F,everywhere first1,middle4,last4,7,F,home first4,middle2,last3,22,M,away #### first1: middle1, last1, 27, M, here first1: middle4, last4, 7, F, home first2: middle2, last2, 56, M, there first3: middle3, last3, 30, F, everywhere first4: middle2, last3, 22, M, away #### use strict; use warnings; my %individuals; foreach my $line () { chomp($line); my ($first, $middle, $last, $age, $sex, $location) = split(/,/, $line); my $record = [ $first, $middle, $last, $age, $sex, $location ]; push(@{$individuals{first}{$first}}, $record); push(@{$individuals{middle}{$middle}}, $record); } foreach my $first (sort keys %{$individuals{first}} ) { foreach my $individual (@{$individuals{first}{$first}}) { my ($first, $middle, $last, $age, $sex, $location) = @$individual; print "$first: $middle, $last, $age, $sex, $location\n"; } } __DATA__ first1,middle1,last1,27,M,here first2,middle2,last2,56,M,there first3,middle3,last3,30,F,everywhere first1,middle4,last4,7,F,home first4,middle2,last3,22,M,away