#!/usr/bin/perl use strict; use warnings; print "$_\n" for Get_Unique_Random(10 , 3); sub Get_Unique_Random { my ($max , $total) = @_; # Requires error checking obviously $total ||= 3; my @return; while ( @return < $total ) { my @list = ( 1 .. $max ); for my $seen ( @return ) { @list = grep { $_ ne $seen } @list; } push @return , $list[ (int rand $#list) + 1 ]; } return wantarray ? @return : \@return; }