my @array = 1..10; my $r1 = sub { \@_ }->(@array); while (my @chunk = splice @$r1, 0, 2) { print "Chunk: @chunk\n"; } $_++ foreach @$r1; print "Original array is still intact! (@array)\n";