sub make_rollover { my( $completion_list ) = @_; my $ix = -1; my $xx = @$completion_list - 1; sub { $ix++; return $completion_list->[ $ix % $xx ]; }; } my $rollover = make_rollover( \@tlud ); while ( my $next = $rollover->() ){ ... }