How do I read two items at a time in a Perl foreach loop?
I'd use splice.
my @list = qw(1 2 3 4 5 6);
while(my ($i,$j) = splice(@list,0,2)) {
print "i: $i, j: $j\n";
}
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\n";
}
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;
}
}