(. Próbowałem delegowania to jako komentarz do odpowiedzi Brian, ale nie mógł uzyskać prawo formatowania)
Musisz zachowaj ostrożność, aby uniknąć zagnieżdżonych zastosowań each
. each
działa na "globalnym" iteratorze w tablicy. Po osiągnięciu końca zwraca wartość false, a następnie resetuje pozycję do początku. Tak więc poniższy kod powoduje nieskończoną pętlę.
Dzięki RJBS za jego talk at YAPC::NA, gdzie wskazał na globalny charakter wbudowanego iteratora.
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";
}
}
Ciekawostki: nie jesteś jedyny. W python znajduje się wbudowana funkcja do konwersji dwóch równoległych tablic do pojedynczej tablicy dwuelementowych krotek i nazywa się ... zip()! http://docs.python.org/library/functions.html#zip :) –
Perl ma 'zip' w [List :: MoreUtils] (http://search.cpan.org/dist/List-MoreUtils) . Istnieje również [jest elegancki zip do przeplatania dwóch list w Perlu] (http://stackoverflow.com/q/38345/8817). –