{ my %position; sub elements(\@;$) { my $arr = shift; my $amt = shift || 1; if(not exists $position{$arr} or $position{$arr} < $#$arr) { my ($start, $next) = ($position{$arr}, $position{$arr} += $amt); return @$arr[$start .. $next - 1]; } else { delete $position{$arr}; return; } } }