<div dir="ltr">vai ter tanta exception assim?!<div><br></div><div>-- anyway</div><div><br></div><div>global variable ? Log4perl ?</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/7/18 Junior Moraes <span dir="ltr"><<a href="mailto:junior@fvox.com.br" target="_blank">junior@fvox.com.br</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi.<br><br>Montei uma classe que utiliza o role Throwable para tratar minhas exceptions. Nestas exceções específicas, preciso escrever os dados dentro de um CSV. Porém, como eu já esperava, não consigo manter o file handle aberto dentro da classe para cada vez que chamo o método throw().<br>



<br>Escrevi um código para ilustrar o problema. Note que o file handle é apenas um bool apenas para exemplificar:<br><pre style="line-height:normal;text-indent:0px;letter-spacing:normal;text-align:start;font-variant:normal;text-transform:none;font-style:normal;font-weight:normal;word-spacing:0px">


package Exception;
use Moose;
with 'Throwable';

has errstr => (is => 'rw', isa => 'Str');
has fh     => (is => 'rw', isa => 'Int', default => 0);

sub write {
    my ($self) = @_;

    if(!$self->fh) {
        # Simulando a abertura do file handle
        print STDERR "Como se estivessemos abrindo o fh...\n";
        $self->fh(1);
    } else {
        # Escrevendo no arquivo...
        print STDERR "Como se estivessemos escrevendo no fh\n";
    }
}

1;

package main;

use common::sense;

sub any_action {
    my ($x) = @_;

    if($x < 10) {
        Exception->throw({
            errstr => 'x menor que 10',
        });
    }
}

for(0 .. 11) {
    eval {
        any_action($_);
    };
    if($@) {
        $@->write();
        printf "exception capturada: '%s'\n", $@->errstr; 
    }
}

1;</pre><br>Pensei em inúmeros meios, como singleton (que não funciona com o role) mas nada muito elegante. E não quero ficar abrindo e fechando o filehandle pra cada exception disparada, né.<br>Alguém tem alguma sugestão de como lidar com exceptions mantendo o file handle aberto? Ou um novo módulo ao invés do Throwable?<br>



<br>Valeuz!<br>[]'s<span class="HOEnZb"><font color="#888888"><br><br>-- <br>====================================<br>Junior "fvox" Moraes<br>Perl Programmer<br>Linux Reg. #557527<br>junior[at]fvox[dot]com[dot]br<br>

fb[dot]com/fvox<br>twitter[dot]com/fvox<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><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div><div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div>

<div><div style="text-align:right"><font size="1" color="#333333"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font size="1" color="#333333"><a href="http://twitter.com/#!/renato_cron" target="_blank">@renato_cron</a></font></div>


</div>