sub getIter (\@$;$) { my ($ref, $size, $next) = @_; $next ||= 0; return sub { $next = 0, return () unless $next <= $#$ref; my $start = $next; $next = $next+$size <= $#$ref ? $next+$size-1 : $#$ref; @$ref[ $start .. $next++ ] } } my $iter = getIter( @array, 2 ); while( my @chunk = $iter->() ) { print "Chunk: @chunk"; }