my @arr = ('A' .. 'Z'); my @combo; my $n = 2; # keep at it till we get $n random values in one pass do { @combo = (); my $i = 0; rand(1) < $n / ++$i && splice(@combo, rand(@combo), $n <= @combo, $_) for @arr; } while @combo < $n; print "@combo\n";