[SP-pm] Exceptions com file handle

Junior Moraes junior at fvox.com.br
Thu Jul 18 06:10:08 PDT 2013


Hi.

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().

Escrevi um código para ilustrar o problema. Note que o file handle é apenas
um bool apenas para exemplificar:


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;


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é.
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?

Valeuz!
[]'s

-- 
====================================
Junior "fvox" Moraes
Perl Programmer
Linux Reg. #557527
junior[at]fvox[dot]com[dot]br
fb[dot]com/fvox
twitter[dot]com/fvox
====================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130718/d4a6cc88/attachment.html>


More information about the SaoPaulo-pm mailing list