[SP-pm] dúvida básica
Renato Santos
renato.cron at gmail.com
Tue Sep 30 07:09:39 PDT 2014
Acontece isso pois o $p é a referencia para o mesmo "$p".
você poderia fazer um clone simples no primeiro nivel (apenas de coisas que
não são outras referencias) usando:
my $copy = {%$p};
$copy->{'cor'} = $c;
push @b, $copy;
ou até mesmo, mais simples:
push @b, {
%$p,
cor => $c,
overwrite => $bar
}
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
>
>
--
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron <http://twitter.com/#!/renato_cron>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20140930/2f01872a/attachment-0003.html>
More information about the SaoPaulo-pm
mailing list