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>
====================================