[Rio-pm] aprendendo ao corrigir provas

Gabriel Vieira gabriel.vieira em gmail.com
Qua Jun 28 09:20:43 PDT 2017


Hehe espero que não tenha atrasado na descoberta de nenhuma cura :)

O lvalue (*left*value) se dá pela atribuição de um valor ao endereço de
memória referenciado no lado esquerdo da expressão. Como exemplo:

my $foo = "bar"; # bar é o novo valor do endereço de memória ao qual $foo
faz referência.

E pode ser usado em subrotinas também como:

my $foo = 5;
sub foo : lvalue { $foo }
foo = 3;
print foo.$/; # imprime 3


2017-06-28 12:03 GMT-04:00 Nicole Scherer <bionica2007-perl em yahoo.com>:

> Ai caramba!
> E eu vinha usando isso indiscriminadamente, sem pensar nas consequências!
> Oh!
> Mas acho que não cheguei a causar nenhuma catástrofe...
> btw, o que é um lvalue ?
>
>
> Em Quarta-feira, 28 de Junho de 2017 12:34, Gabriel Vieira <
> gabriel.vieira em gmail.com> escreveu:
>
>
> Olá Nicole,
>
> Está sim. A depender do valor de cada item, claro. Isso é bem interessante
> aliás.
>
> If any element of LIST is an lvalue, you can modify it by modifying VAR
> inside the loop. Conversely, if any element of LIST is NOT an lvalue, any
> attempt to modify that element will fail. *In other words, the foreach
> loop index variable is an implicit alias for each item in the list that
> you're looping over.*
>
> Segue a referência da documentação: http://perldoc.
> perl.org/perlsyn.html#For-Loops
>
> 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.
> Mas assim, me parece que ela não passa de uma referência.
> Está certo isto?
>
> []s,
> Nicole
>
>
> ______________________________ _________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/ listinfo/rio-pm
> <http://mail.pm.org/mailman/listinfo/rio-pm>
>
>
>
>
> --
> Gabriel Vieira
>
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Gabriel Vieira
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20170628/9ccc6845/attachment.html>


Mais detalhes sobre a lista de discussão Rio-pm