(. Ho provato a postare questo come un commento alla risposta di Brian, ma non sono riuscito a ottenere la giusta formattazione)
Devi fare attenzione a evitare gli usi annidati di each
. each
funziona su un iteratore "globale" sull'array. Quando raggiunge la fine, restituisce false e quindi reimposta la posizione all'inizio. In questo modo il codice seguente produce un ciclo infinito.
Grazie a RJBS per il suo talk at YAPC::NA in cui ha sottolineato la natura globale dell'iteratore integrato.
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";
}
}
fonte
2010-09-15 14:42:42
Curiosità: non sei l'unico. In Python c'è una funzione integrata per convertire due array paralleli in una singola serie di tuple a due elementi, e si chiama ... zip()! http://docs.python.org/library/functions.html#zip :) –
Perl ha un 'zip' in [List :: MoreUtils] (http://search.cpan.org/dist/List-MoreUtils) . C'è anche [C'è un elegante zip per interlacciare due elenchi in Perl] (http://stackoverflow.com/q/38345/8817). –