my %idx = (); my $val = 0; my @num = (); my $nrndded = 3; my $ulmt = 10; while(scalar keys %idx < $nrneeded){ $val = int(rand($ulmt-1)+1); # map range to (1..ulmt) $idx{$val} ||= 1 && push @num, $val; }