[Cascavel-pm] Soma

Eden Cardim edencardim em gmail.com
Segunda Julho 10 12:38:17 PDT 2006


On 7/10/06, Igor Sutton <igor.sutton em gmail.com> wrote:
> Agora que a gente já sabe o que você quer fazer :) Outra opção é transformar
> a sua lista de resultados em um hash:
>
>  my @vals = qw(1:2 2:3 3:4);
>  my $x = 1;
>  my $y = 2;
>
>  my %tmp = map { split /:/ } @vals;
>  while (my ($k, $v) = each %tmp) {
>    $x += $k;
>    $y += $v;
>    print "$x $y\n";
>
>  }

Ô Igor, da forma que você fez, pode ocorrer perda de dados devido à
sobre-escrita de valores que possuem a mesma chave. Se seus valores
forem qw(1:2 1:3 1:4), o loop while só vai executar uma vez.

Eu pensei em usar hash tb mas de forma diferente:

<code>
my %tmp;
@tmp{qw($x $y $z)} = split(/:/, '1:2:3');
no strict 'refs';
$$_ += $tmp{$_} foreach keys %tmp;
use strict 'refs'
</code>


Mais detalhes sobre a lista de discussão Cascavel-pm