my %seen; for my $row (@data) { my ($id) =~ /^(\d+):/ or die "bad line: [$row]"; $seen{$id} ||= $row; } print $seen{$_}, "\n" for sort {$a<=>$b} keys %seen;