#!/usr/bin/env perl use strict; use warnings; use Data::Dump; use feature qw(say); my @array = ( 29, 24, 0, 24, 24, 12, 0, 0, 10, 10, 10, 19, 17, 15, 13, 1, 12, 12, 24 ); dd uniq( \@array ); sub uniq { my $array = shift; my $last = @$array[0]; my @uniq; for my $item ( sort { $a <=> $b } @$array ) { if ( $item != $last ) { $last = $item; push @uniq, $item; } } return \@uniq; } __END__ [0, 1, 10, 12, 13, 15, 17, 19, 24, 29] #### sub uniq (@) { my %seen = (); my $k; my $seen_undef; grep { defined $_ ? not $seen{ $k = $_ }++ : not $seen_undef++ } @_; }