Alexei,<div><br></div><div>Isto está no Capítulo 9, 'Argument Lists', e na verdade o PBP diz que você não deve manipular diretamente os valores recebidos do @_ pois vai alterar o original, mesmo não passando via referencia direta, vc está sim recebendo 'um ponteiro' (desculpe os purista, mas não encontrei outro nome para isto).</div>

<div><br></div><div><code></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">my $a='foo';</font></div><div><font face="courier new, monospace">failure($a);</font></div>

<div><font face="courier new, monospace">print "$a\n";</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub failure {</font></div><div><font face="courier new, monospace">   $_[0] = 'Perdeu !';</font></div>

<div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div></code></div><div><br></div><div>então se eu fizer '<font face="courier new, monospace">my $param = eval { validate(@,...) }</font>'  estou fazendo o que o PBP sugere. Faz o 'unpack',  e valide os parâmetros nomeados.</div>

<div><br></div><div>Solli Honorio</div><div><br><div class="gmail_quote">Em 21 de junho de 2012 13:59, Alexei Znamensky <span dir="ltr"><<a href="mailto:russoz@gmail.com" target="_blank">russoz@gmail.com</a>></span> escreveu:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><br><div class="gmail_quote"><div class="im">2012/6/21 Solli Honorio <span dir="ltr"><<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Pessoal,<div><br></div><div>Este é apenas um compartilhamento de experiência que pode ser útil aos demais, sobre a minha frustação do perl não ter um try-catch de leitura simples e nativo. </div><div><br></div><div>Tenho observado que o Try::Tiny está sendo utilizado em vários módulos sérios e com grande utilização, em substituição ao eval{ ... } (já que apenas os letrados em perl entende isto).</div>





<div><br></div><div>As coisas estavam encaminhando bem, até que eu resolvi 'melhorar o meu código' e passei a ter uma coisa do tipo : </div><div><br></div><div><code></div><div><div><font face="courier new, monospace">use Try::Tiny;</font></div>





<div><font face="courier new, monospace">use Params::Validate qw(:all);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub foo {</font></div><div><font face="courier new, monospace">  my $self  = shift;</font></div>





<div><font face="courier new, monospace">  my $param = try { validate(@_, { name => { SCALAR } } ) } catch { ... };</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    ...</font></div>





<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">}</font></div></div><div></code></div><div><br></div><div>E aí todos os meus teste falharam, depois de algumas análise descobri (sem muita surpresa) que o try { } localiza o @_ (claro, isto é um função qualquer) e  com valor inválido. Este problema eu não tenho com o eval { }. </div>



</blockquote></div><div><br>Solli, só para fazer o advogado-do-diabo-eu-te-disse-eu-te-disse, a Boa Prática (R), preconizada pelo PBP, leia-se Perl::Critic, prega que você deve ***sempre*** copiar (acho que o termo que eles usam é desempacotar, mas eu acho mais coerente chamar de cópia, pois é efetivamente uma cópia). Ou seja, para ser um bom menino, você deveria ter feito:<br>



<div><code></div><div><div class="im"><div><font face="courier new, monospace">use Try::Tiny;</font></div>

<div><font face="courier new, monospace">use Params::Validate qw(:all);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub foo {</font></div></div><div><font face="courier new, monospace">  my $self  = shift;<br>



  my @array = @_;<br></font></div>

<div><font face="courier new, monospace">  my $param = try { validate(@array, { name => { SCALAR } } ) } catch { ... };</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    ...</font></div>





<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">}</font></div></div><div></code></div><br>Mas bons meninos não tomam tanta cerveja quanto você. ;-)<br><br>[]s,<br>



Russo<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="im">

<div><br></div><div>Bom, eu ainda vou continuar a utilizar o Try::Tiny, por enquanto, mas é neste momento que a gente percebe que estes 'quebra-galho' no perl é chato !</div><span><font color="#888888"><div>

<br></div><div>Solli Honorio</div>

<div><br></div><div><br></div><div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa<br>
</div>
</font></span><br></div><div class="im">=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></div></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><br>-- <br>Alexei "RUSSOZ" Znamensky | russoz EM gmail com | <a href="http://russoz.org" target="_blank">http://russoz.org</a><br>

GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C<br>

<a href="http://www.flickr.com/photos/alexeiz" target="_blank">http://www.flickr.com/photos/alexeiz</a> | <a href="http://github.com/russoz" target="_blank">http://github.com/russoz</a><br>"I don't know... fly casual!" -- Han Solo<br>




</font></span><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">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><br clear="all"><div><br></div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa<br>
</div>