note
vrk
<p>
That's cheating a bit, because it only works with arrays of nonnegative integers. The OP version works with any numeric elements (<code><=></code> comparison). Interesting angle nonetheless.
</p>
<p>
The hashless solution doesn't actually need any sorting. The following is a brute force filter, which maintains the input order of elements:
</p>
<code>
use v5.14;
use warnings;
sub uniq {
my @u;
for my $x (@_) {
next if grep { $x == $_ } @u;
push @u, $x;
}
return @u;
}
say join ', ', uniq(29,24,0,24,24,12,0,10,10,19,17,15,13,1,12,12,24);
</code>
<p>
It's of course asymptotically slower than sorting (O(n**2) vs O(n*log(n))), but if the input happens to be mostly duplicates, it will be faster in practice.
</p>
1188013
1188043