sub bigrand{ my $in = shift; my $limit = 32768; if ($in <= $limit){ return int rand $in; } my $blockSize = int($in ** .5); my $blockSelect = int rand int ($in/$blockSize); my $leftOver = $in % $blockSize; if ($blockSelect < $leftOver){ return ($blockSelect * ($blockSize + 1)) + int rand ($blockSize + 1); }else{ return ($leftOver * ($blockSize + 1)) + (($blockSelect - $leftOver) * $blockSize) + int rand ($blockSize); } }