%seen = (); @uniqu = grep { ! $seen{$_} ++ } @list; #### use strict; use warnings; use Algorithm::Numerical::Shuffle qw(shuffle); my @array = (1..10,2..11,3..12); print " begin: @array\n"; my %seen; my @unique = grep {!$seen{$_}++} @array; print " unique: @unique\n"; my @shuffled = shuffle @unique; print "shuffled: @shuffled\n"; #### my @unique = unique(@array); #### sub unique { my %seen; my @unique = grep {!$seen{$_}++} @_; return @unique; } #### sub unique { local %_; grep !$_{$_}++, @_ }