{ my $pos = 0; sub elements(\@$) { my($ar, $n) = @_; my $range = $pos + $n < @$ar ? $pos + ($n - 1) : $#{$ar}; my @ret = @$ar[ $pos .. $range ]; $pos += $n; return @ret ? @ret : (); } } my @ar = qw( foo bar baz one two three ichi ni san xxx ); while(my(@chunk) = elements(@ar, 3)) { print "got: @chunk\n"; } __output__ got: foo bar baz got: one two three got: ichi ni san got: xxx yy