[Rio-pm] hash como parametro

Eden Cardim edencardim em gmail.com
Quarta Junho 30 13:08:34 PDT 2010


>>>>> "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.


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