my %hash = map { $_ => $_ } @array; # then... my @unique_unordered = values %hash; my @unique_ordered = grep {defined} map { delete $hash{$_} } @array;