use warnings; use strict; my @array = (23,1,2,3,4,2,3,5,8); my $cc; my @uniq = map { $_->[0] } sort { $a->[1] <=> $b->[1]} grep {! $_->[2]} sort { my $v = $a->[0] cmp $b->[0]; $a->[2] = 1 unless $v or $b->[2]; $v} map {[$_,$cc++]} @array; print "$_," for @uniq;