[SP-pm] dúvida básica
Andre Carneiro
andregarciacarneiro at gmail.com
Tue Sep 30 07:37:39 PDT 2014
Opa!
Obrigado a todos!
A cagada era copiar a referência para um scalar. O lance é copiar para um
hash, de fato, dentro do loop, e fazer o push da referência desse hash.
<code>
use Data::Printer colored => 1;
my @a = ("amarelo","branco","vermelho");
my $p={id=>1,nome=>"foo"};
my @b = ();
foreach my $c(@a){
my %p = %$p;
$p{cor} = $c;
push @b,\%p;
}
print p @b;
</code>
Obrigado a todos, e um abraço!
2014-09-30 11:10 GMT-03:00 Tiago Peczenyj <tiago.peczenyj at gmail.com>:
> por que $p nesse caso é uma referencia. vc esta reusando uma referencia a
> um hash nos 3 itens desse array no loop.
>
> para evitar, declare %p dentro do loop e passe a referencia dele no array.
>
> 2014-09-30 11:04 GMT-03:00 Andre Carneiro <andregarciacarneiro at gmail.com>:
>
>> Salve monges
>>
>> Desculpem incomodar vocês com essa dúvida básica, mas não estou
>> encontrando a idiotice que estou fazendo, e isso já está me consumindo
>> algum tempo. Abaixo, um código resumido que reproduz o problema:
>>
>>
>> <code>
>>
>> use Data::Printer;
>> my @a = ('amarelo','branco','vermelho');
>> my $p = {id=>1,nome=>"foo"};
>> my @b = ();
>> foreach my $c(@a){
>> $p->{'cor'} = $c;
>> push @b,$p;
>> }
>> print p @b;
>>
>> </code>
>>
>> Resultado:
>> [
>> [0] {
>> cor "vermelho",
>> id 1,
>> nome "foo"
>> },
>> [1] var[0],
>> [2] var[0]
>> ]
>>
>> Resultado esperado:
>> [
>> [0] {
>> cor "vermelho",
>> id 1,
>> nome "foo"
>> },
>> [1] {
>> cor "amarelo",
>> id 1,
>> nome "foo"
>> },
>> [2] {
>> cor "preto",
>> id 1,
>> nome "foo"
>> }
>> ]
>>
>>
>> A pergunta é simples. Porque não consigo o resultado esperado?
>>
>>
>> Obrigado!
>>
>> --
>> André Garcia Carneiro
>> Software Engineer
>> (11)982907780
>>
>> =begin disclaimer
>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://about.me/peczenyj
>
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
--
André Garcia Carneiro
Software Engineer
(11)982907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20140930/332b4a7c/attachment.html>
More information about the SaoPaulo-pm
mailing list