use Data::Dump 'pp'; my @a = qw/2 1 3 4 5 4 3 3 4 5/; my %seen; my @result; for ( @a ) { #for each element in @a if ( not $seen{$_} ) { #if the element hasn't already been seen push @result, $_; #add it to the result set } $seen{$_}++; #note that the element's been seen } print join(",", @result), "\n"; pp \%seen; #{ 1 => 1, 2 => 1, 3 => 3, 4 => 3, 5 => 2 }