First lets get the general advice out of the way:
- using strictures (use strict; use warnings;) - very good
- not using three parameter open - bad
- not using lexical file handles (see example code below) - bad
- checking open - very good
- not providing sample data - vary bad
- not providing sample output- vary bad
- providing sample code - excellent
The following may be what you are looking for. If not, it's at least a good starting point for reframing your question:
use strict;
use warnings;
my $sampleData = <<EOF_DATA;
17|5|176|1288|1387
163|1|523|30|6
2592|2|9|1288|6174
152|1|170|1845|473
3|13|50|30|1766
EOF_DATA
my %esList;
open my $inFile, '<', \$sampleData or die "Unable to open file - $!\n"
+;
while (defined (my $line = <$inFile>)) {
my ($tn, $err, $ent, $es, $coid) = split /\|/, $line;
$esList{$es} = $line if ! exists $esList{$es};
}
close $inFile;
print $esList{$_} for sort {$a <=> $b} keys %esList;
Prints:
163|1|523|30|6
17|5|176|1288|1387
152|1|170|1845|473
True laziness is hard work
|