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