use strict; my %ID; #load the data... while () { chomp; my @result = split (/\|/); my $rec = {LastName=>$result[1], FirstName=>$result[2], TimeIN=>$result[3], TimeOUT=>$result[4]}; push @{$ID{$result[0]}}, $rec; } #print the data foreach my $key(sort keys %ID){ print "$key\n"; foreach (@{$ID{$key}}){ print "$_->{LastName}\n"; } } __DATA__ 0001|Flintstone|Fred|0900|1300 0001|Flintstone|Fred|0900|1100 0001|Flintstone|Fred|1200|1630 0002|Flintstone|Wilma|0900|1500 0002|Flintstone|Fred|0930|1100 0003|Rubble|Barney|0900|1100