<div>O que acontece é o seguinte,</div><div>Veja o exemplo:</div><div><br></div><div>use Data::Printer;<br>                                                                                                                                                                                                                                <br>
sub params {</div><div>##<br># o usual seria algo assim:</div><div># my ( $self, $var1, $var2, $varX ) = @_;<br><br>##<br># mas tb é possível fazer assim:<br>    warn p @_; #tem os parametros acima<br>    my $self = shift; #tira o primeiro item da lista @_<br>
warn p @_; #imprime status atual da lista, sem o primeiro item que acaba de ser retirado<br>    my ( $var1, $var2, $varX ) = @_; #associa cada item da lista da esquerda ao correspondente na lista @_ da direita<br>    warn p $var1;<br>
    warn p $var2;<br>    warn p $varX;</div><div>##<br># e tambem é possível passar os parametros diretamente para outro metodo com \@_:</div><div># $self->metodo( \@_ );</div><div># ou, &metodo( \@_ ); </div><div>
# etc...<br>}<br><br>&params( 'SELF', {aa=>2}, {bb=>3}, {cc=>4} );<br></div><br><div class="gmail_quote">2012/12/3 Ulisses Montenegro <span dir="ltr"><<a href="mailto:ulisses.montenegro@gmail.com" target="_blank">ulisses.montenegro@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">André,<div><br></div><div>Faz tempo que não brinco com Perl, mas se a memória não falha, existiriam dois motivos legítimos para utilizar um parâmetro por referência (que é o que o \@_ representa, uma referência para o @_):</div>


<div><br></div><div>1. Modificar os valores originais, já que o comportamento padrão de Perl é passagem por valor e não por referência, ou</div><div>2. Evitar a cópia dos valores dos parâmetros (nesse caso seria mais uma otimização do que uma necessidade)</div>


<div><br></div><div>Como dizem os americanos, I might be putting my foot in my mouth, mas acho que seria isso. Para mais detalhes sobre o uso de referências em Perl, 'perldoc perlref'.</div><div><br></div><div>[]'s</div>


<div class="gmail_extra"><br><br><div class="gmail_quote">2012/12/3 Andre Carneiro <span dir="ltr"><<a href="mailto:andregarciacarneiro@gmail.com" target="_blank">andregarciacarneiro@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>
<div>Boa noite!</div><div><br></div><div><br></div><div>Estou fazendo uma pesquisa sobre validação de parâmetros em métodos, para módulos que utilizam Moose. Encontrei a seguinte solução abaixo:</div><div><br></div><div>

<br>

</div><div><br></div><div><a href="http://search.cpan.org/~drolsky/MooseX-Params-Validate-0.16/lib/MooseX/Params/Validate.pm" target="_blank">http://search.cpan.org/~drolsky/MooseX-Params-Validate-0.16/lib/MooseX/Params/Validate.pm</a></div>



<div><br></div><div><br></div><div><br></div><div>No entanto, tem um detalhe que eu não compreendi. Porque eu preciso passar \@_ para o método 'validated_list' ?</div><div><br></div><div>Dei uma olhada no código, e vi que ele utiliza o primeiro parâmetro que é chamado de '$args' dentro do método e existe um algoritmo que faz uma série de verificações nessa variável e depois envia para validate_with, através do módulo Params::Validate. Lá descobri que 'validate_with' é um 'símbolo' que é interpretado como uma sub por um outro método, enfim... Tem alguém por aqui capaz de me ajudar a entender esta "bagunça" e, principalmente, porque do \@_ ?? </div>



<div><br></div><div><br></div><div>OBS: Antes de qualquer troll me interpretar mal, repare que coloquei 'bagunça' entre aspas, o que significa que não acho que isso realmente seja uma bagunça. Por favor, evitem comentários inúteis em cima disso! Já me considero velho e sem saco pra flames...  ;-)</div>



<div><br></div><div><br></div><div>Obrigado!</div><span><font color="#888888"><div><br></div><div><br></div><br clear="all"><div><br></div>-- <br>André Garcia Carneiro<br>Software Engineer<br><a href="tel:%2811%29982907780" value="+5511982907780" target="_blank">(11)982907780</a><br>



</font></span><br></div></div>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><span><font color="#888888"><br><br clear="all"><div><br></div>-- <br>“If debugging is the process of removing software bugs, then programming must be the process of putting them in.” - Edsger Dijkstra<br>


</font></span></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br>