Saudações Nicole, On Wed, Jun 28, 2017 at 11:33:46AM -0400, Gabriel Vieira wrote: > 2017-06-28 11:07 GMT-04:00 Nicole Scherer <bionica2007-p...@yahoo.com>: > > Olá Monges! > Estou chocada! > Acabei de descobrir que alterar o valor de $item dentro de um loop foreach > my $item (@vetor){ } altera o valor do elemento do array! > Como é que eu nunca tinha percebido isto? > Quando leio os scripts dos alunos, sempre aprendo uma maneira inusitada de > resolver uma questão. Mas esta contradiz uma certeza que eu tinha... > #LETRA d) da Questão 01 - TROCAR T por U na > Sequencia > my @nucls = split(//, $dna); > > foreach my $item(@nucls) { > print "@nucls\n"; > if($item eq "T") { > $item = "U"; > } > if($item eq "t") { > $item = "u"; > } > } > my $seq = uc(join("", @nucls)); > E a sequencia realmente foi modificada! > Na minha concepção, a variável $item recebia o valor de cada elemento do > array, mas ocupava um endereço diferente. O Gabriel Vieira já explicou e vou fazer apenas fazer algumas especulações:
1. Você está acostumada a usar: foreach my $item ( split //, $dna ) {...} Este caso não se encaixa na explicação porque LIST, neste caso, não possui "lvalues". 2. Você não costuma usar 'foreach my $item' sobre um ARRAY e sim outras formas de looping. > Mas assim, me parece que ela não passa de uma referência. Não ficou claro (para mim), mas acho que aqui, "referência" não é a que o Perl entende por referência, correto? De qualquer forma... para ter certeza, poderíamos utilizar o bultin "ref", por exemplo, e conferirmos se a saída seria diferente de "empty string". > Está certo isto? > []s, > Nicole _______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm