use strict; use warnings; my $nRepeats = 1; my @sSet = (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20); my $nLength = 8; my @sAll; for (1..$nRepeats) { push (@sAll, @sSet); } if ($nLength - 1 > $#sAll) {die "Don't be silly"} my $sString; for (1..$nLength) { my $i = int(rand(@sAll)); $sString .= $sAll[$i]; $sAll[$i] = $sAll[-1]; pop(@sAll); } print "$sString \n";