my @ICE = map { [ split /\s*\(tab\)\s*/ ] } ; my %seen; my @ICEU = grep { !$seen{$_->[0]}++ } @ICE; print Dumper \@ICE; print Dumper \%seen; __DATA__ 30F-WKS(tab)`1781183799.xxxx1' (tab) IC---; 30F-WKS (tab) `1781183799.xxx11' (tab) IC---; ADM34A3F9 (tab) `1781183799.41455' (tab) IC---; #### $VAR1 = [ [ '30F-WKS', '`1781183799.xxxx1\'', 'IC---; ' ], [ '30F-WKS', '`1781183799.xxx11\'', 'IC---; ' ], [ 'ADM34A3F9', '`1781183799.41455\'', 'IC---; ' ] ]; $VAR1 = { 'ADM34A3F9' => 1, '30F-WKS' => 2 };