[Cascavel-pm] Loop de dois em dois elementos
Nelson Ferraz
nferraz em phperl.com
Quarta Outubro 22 07:56:38 CDT 2003
Pessoal,
Aqui vai um probleminha interessante.
Eu tenho uma lista:
@list = qw(q w e r t y);
Eu posso fazer um loop simples como este:
for $el (@list) {
print "$el\n";
}
Mas imagine que eu queira fazer um loop de dois em dois elementos,
mantendo a ordem original da lista. A maneira mais natural seria algo assim:
for $el1, $el2 (@list) {
print "$el1 - $el2\n";
}
Mas este código não funciona.
Existem vários workarounds, como por exemplo:
while (my ($el1, $el2) = splice(@list, 0, 2)) {
print "$el1 - $el2\n";
}
Curiosamente, este é um exemplo em que a linguagem Perl não simplifica a
nossa vida, tornando uma coisa simples mais difícil do que deveria ser.
Um caso tão raro que resolvi compartilhar com vocês! :)
(A propósito... tenho certeza de que muitos de vocês pensaram na
seguinte solução:
my %hash = @list;
foreach (keys %hash) {
print "$_ - $hash{$_}\n";
}
Infelizmente, esta não seria uma solução válida, pois o hash não mantém
a ordem original da lista.)
--
[]s
Nelson
________________________________________________________________
Nelson Ferraz
GNU BIS: http://www.gnubis.com.br
PhPerl: http://www.phperl.com
Mais detalhes sobre a lista de discussão Cascavel-pm