my %seen=(); $array_size = @array; $index = ""; until ($index ne "") { my $dbl_chk = keys %seen; if ($dbl_chk == $array_size) { #Every array element has been seen once. %seen = (); #start over! } my $new = int(rand($array_size)); if (!(exists($seen{$new}))) { $seen{$new} = 1; $index = $new; } } #### @seen = keys %seen; #array index of "seen" values.