[SP-pm] dúvida básica

Gabriel Vieira gabriel.vieira at gmail.com
Tue Sep 30 07:10:28 PDT 2014


Você está lidando com uma referência, no caso $p, que aponta para uma
estrutura de dados única, que você altera à medida da execução da
aplicação. Ao fim a mesma referência é inserida diversa vezes no array
apontado para a mesma estrutura já aplicada as alterações a ela.

Você pode fazer "push @b, {%$p}" que no caso cria uma nova estruturada.

2014-09-30 11:04 GMT-03:00 Andre Carneiro <andregarciacarneiro em 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 em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Gabriel Vieira
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20140930/8f36eb06/attachment.html>


More information about the SaoPaulo-pm mailing list