[Rio-pm] aprendendo ao corrigir provas
jimmy
jimmy.tty em gmail.com
Qua Jun 28 11:40:57 PDT 2017
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-perl em 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
Mais detalhes sobre a lista de discussão Rio-pm