(Я пытался опубликовать это как комментарий к ответу Брайана, но не смог правильно отформатировать.)
Вы должны быть осторожны, чтобы избежать вложенного использования each
. each
работает над "глобальным" итератором в массиве. Когда он достигает конца, он возвращает false и затем сбрасывает позицию в начало. Таким образом, следующий код приводит к бесконечному циклу.
Спасибо RJBS за его выступление на YAPC :: NA , где он указал на глобальную природу встроенного итератора.
use strict;
use warnings;
my @array = 'A' .. 'J' ;
while ( my ($index, $value) = each @array){
print "printing ($index, $value) from outer loop\n";
while ( my ($index_in, $value_in) = each @array){
print "printing ($index_in, $value_in) from inner loop\n";
}
}