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