#!/usr/bin/perl use strict; use warnings 'all'; use Data::Dumper; my @found = ("10\tdomain-a", "12\tdomain-b", "5\tdomain-c", "8\tdomain-a", "14\tdomain-b", "15\tdomain-c", "11\tdomain-a", "13\tdomain-b", "10\tdomain-c"); # get doubles my %seen; foreach my$i (0..$#found) { my @ele = split("\t", $found[$i]); $seen{$ele[-1]} = [] unless $seen{$ele[-1]}; push(@{$seen{$ele[-1]}}, [$i, $ele[0]]); } # delete doubles foreach my$key (keys %seen) { if (@{$seen{$key}} > 1) { # sort my $top = $seen{$key}->[0]; foreach my$act (@{$seen{$key}}) { if ($act->[1] > $top->[1]) { $top = $act } } # splice foreach my$act (@{$seen{$key}}) { if ($act->[0] != $top->[0]) { $found[$act->[0]] = undef } } } } @found = grep { defined($_) } @found; # output print "\@FOUND:\n", Dumper(\@found), "\n";