[Rio-pm] hash como parametro

Solli Honorio shonorio em gmail.com
Quarta Junho 30 13:17:07 PDT 2010


Eu iria colocar isto na minha resposta, mas já sei que vc (Eden) adora
responder esta pergunta ... então deixei ... e estava aguardando :D

Solli M. Honório
ps.: Não vamos passar referencia de scalar, a menos que você precise do
valor que foi alterado. Segundo, cuidado com passagem de valor por
referência, pois se vc alterar o valor na função, o valor será alterado na
origem também ....

Em 30 de junho de 2010 17:08, Eden Cardim <edencardim em gmail.com> escreveu:

> >>>>> "Gabriel" == Gabriel Blum <blum em pobox.com> writes:
>
>    Gabriel> isso decorre da maneira que o perl passa parâmetros. Sugiro
>    Gabriel> vc passar a referência, que é bem mais eficiente
>    Gabriel> inclusive.
>
> Não é *bem* mais eficiente, só um pouco. Perl sempre faz passagem por
> referência implicitamente, através do array especial @_, que é um alias
> pra lista de argumentos, se você alterar o @_ diretamente, os argumentos
> originais serão modificados também. O que faz ser menos eficiente é o
> tipo de dados que você está passando, no caso de um hash não tem como
> saber em qual slot do @_ está o valor que você quer alterar, então você
> precisa re-mapear o hash, efetivamente criando uma "cópia rasa" dos
> valores, que é mais lento do que usar referências.
>
> Inclusive, acho que pra alguns casos é mais lento usar uma referência:
>
> perl -le'my @foo = qw(bar baz); sub {$_[1] = "quux"}->(@foo); print "@foo"'
> perl -le'my @foo = qw(bar baz); sub {$_[0]->[1] = "quux"}->(\@foo); print
> "@foo"'
>
> já que a segunda alternativa envolve três etapas adicionais: a
> criação/destruição da referência e a dereferenciação.
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20100630/d039710c/attachment.html>


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