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] = &quot;quux&quot;}-&gt;(@foo) foreach(1..$ARGV[0]);</div>
<div>print time-$t.&quot;s elapsed\n&quot;;</div><div><br></div><div>$t = time;</div><div>sub {$_[0]-&gt;[1] = &quot;quux&quot;}-&gt;(\@foo) foreach(1..$ARGV[0]);</div><div>print time-$t.&quot;s elapsed\n&quot;;</div></div>
<div><br></div><div>C:\&gt;<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">&lt;<a href="mailto:edencardim@gmail.com">edencardim@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">&gt;&gt;&gt;&gt;&gt; &quot;Gabriel&quot; == Gabriel Blum &lt;<a href="mailto:blum@pobox.com">blum@pobox.com</a>&gt; writes:<br>

<br>
    Gabriel&gt; isso decorre da maneira que o perl passa parâmetros. Sugiro<br>
    Gabriel&gt; vc passar a referência, que é bem mais eficiente<br>
    Gabriel&gt; 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 &quot;cópia rasa&quot; 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&#39;my @foo = qw(bar baz); sub {$_[1] = &quot;quux&quot;}-&gt;(@foo); print &quot;@foo&quot;&#39;<br>
perl -le&#39;my @foo = qw(bar baz); sub {$_[0]-&gt;[1] = &quot;quux&quot;}-&gt;(\@foo); print &quot;@foo&quot;&#39;<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>