[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