#!/your/perl/here use strict; use warnings; { # closure for "static" variables my $mult = 2**15-1; my $offset = 76543; my $state = 0; sub get_rand { my $list = shift; # ref $state = ($state*$mult+$offset)%scalar(@{$list}); return $list->[$state]; } sub init_get_rand { my $list = shift; $state = rand(scalar(@{$list})); } } my $list = [0..17]; for (1..2) { init_get_rand($list); for ( 1..@{$list} ) { print get_rand($list), " "; } print "\n"; } __OUTPUT__ 8 9 16 11 12 1 14 15 4 17 0 7 2 3 10 5 6 13 2 3 10 5 6 13 8 9 16 11 12 1 14 15 4 17 0 7