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="color:rgb(0,0,0);font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;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<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>

====================================