Muito obrigado Eden, realmente fiz um teste prático (rudimentar, mas eficiente) e deu pra ver a diferença :-D<div><div><br></div><div><div>my @foo = qw(bar baz);</div><div><br></div><div>my $t = time;</div><div>sub {$_[1] = "quux"}->(@foo) foreach(1..$ARGV[0]);</div>
<div>print time-$t."s elapsed\n";</div><div><br></div><div>$t = time;</div><div>sub {$_[0]->[1] = "quux"}->(\@foo) foreach(1..$ARGV[0]);</div><div>print time-$t."s elapsed\n";</div></div>
<div><br></div><div>C:\><a href="http://a.pl">a.pl</a> 30000000</div><div><div>22s elapsed</div><div>29s elapsed</div><div><br></div><br><div class="gmail_quote">2010/6/30 Eden Cardim <span dir="ltr"><<a href="mailto:edencardim@gmail.com">edencardim@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">>>>>> "Gabriel" == Gabriel Blum <<a href="mailto:blum@pobox.com">blum@pobox.com</a>> writes:<br>
<br>
Gabriel> isso decorre da maneira que o perl passa parâmetros. Sugiro<br>
Gabriel> vc passar a referência, que é bem mais eficiente<br>
Gabriel> inclusive.<br>
<br>
Não é *bem* mais eficiente, só um pouco. Perl sempre faz passagem por<br>
referência implicitamente, através do array especial @_, que é um alias<br>
pra lista de argumentos, se você alterar o @_ diretamente, os argumentos<br>
originais serão modificados também. O que faz ser menos eficiente é o<br>
tipo de dados que você está passando, no caso de um hash não tem como<br>
saber em qual slot do @_ está o valor que você quer alterar, então você<br>
precisa re-mapear o hash, efetivamente criando uma "cópia rasa" dos<br>
valores, que é mais lento do que usar referências.<br>
<br>
Inclusive, acho que pra alguns casos é mais lento usar uma referência:<br>
<br>
perl -le'my @foo = qw(bar baz); sub {$_[1] = "quux"}->(@foo); print "@foo"'<br>
perl -le'my @foo = qw(bar baz); sub {$_[0]->[1] = "quux"}->(\@foo); print "@foo"'<br>
<br>
já que a segunda alternativa envolve três etapas adicionais: a<br>
criação/destruição da referência e a dereferenciação.<br>
<div><div></div><div class="h5">_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br></div></div>