my $M = 8; my $A = 5; my $X = 0; sub lcrng { $X = (($X * $A) + 1) % $M; return ($X); } #### +---------------+ | + | | + | | + | | +| | + | | + | |+ | | + | +---------------+ #### my $Y = 0; my @T = (0) x $M; sub shuffle { ($Y, $T[$Y]) = ($T[$Y], lcrng()); return ($Y); } #### +---------------+ | + +| |+ + + | | + + | | + + | | + +| | + + | |+ | | + + | +---------------+ #### $Y == 1 @T == ( 1, 1, 1, 1, 1, 1, 1, 1 )