[SP-pm] Try::Tiny : uma opção de exception, mas nem tanto !!!

Alexei Znamensky russoz at gmail.com
Thu Jun 21 09:59:01 PDT 2012


2012/6/21 Solli Honorio <shonorio em gmail.com>

> Pessoal,
>
> 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.
>
> 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).
>
> As coisas estavam encaminhando bem, até que eu resolvi 'melhorar o meu
> código' e passei a ter uma coisa do tipo :
>
> <code>
> use Try::Tiny;
> use Params::Validate qw(:all);
>
> sub foo {
>   my $self  = shift;
>   my $param = try { validate(@_, { name => { SCALAR } } ) } catch { ... };
>
>     ...
>
> }
> </code>
>
> 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 { }.
>

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:
<code>
use Try::Tiny;
use Params::Validate qw(:all);

sub foo {
  my $self  = shift;
  my @array = @_;
  my $param = try { validate(@array, { name => { SCALAR } } ) } catch { ...
};

    ...

}
</code>

Mas bons meninos não tomam tanta cerveja quanto você. ;-)

[]s,
Russo



>
> 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 !
>
> Solli Honorio
>
>
> --
> "o animal satisfeito dorme". - Guimarães Rosa
>
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Alexei "RUSSOZ" Znamensky | russoz EM gmail com | http://russoz.org
GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C
http://www.flickr.com/photos/alexeiz | http://github.com/russoz
"I don't know... fly casual!" -- Han Solo
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120621/2d0205f5/attachment.html>


More information about the SaoPaulo-pm mailing list