I believe the proper way to do this is to use natatime, from List::MoreUtils:
from the docs:
natatime BLOCK LIST
Creates an array iterator, for looping over an array in chunks of $n
items
at a time. (n
at a time, get it?). An example is probably a better
explanation than I could give in words.
Example:
my @x = ('a' .. 'g');
my $it = natatime 3, @x;
while (my @vals = $it->())
{
print "@vals
";
}
This prints
a b c
d e f
g
The implementation of List::MoreUtils::natatime
:
sub natatime ($@)
{
my $n = shift;
my @list = @_;
return sub
{
return splice @list, 0, $n;
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…