[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