[SP-pm] problemas com tratamento de exceções
André Garcia Carneiro
andre.garcia.carneir em terra.com.br
Terça Dezembro 18 08:11:52 PST 2007
> Depende de onde estao os modulos, Andre, e de quais diretorios voce tem
> no seu @INC.
>
> Voce pode me postar o layout dos modulos e diretorios, e o conteudo do
> seu @INC?
Sim, vou detalhar mais. O @INC está lá embaixo.
O Layout dos diretórios é o seguinte:
Microspider #dir
Spawn.pm
Exception.pm
Exceptions #dir
Spawn.pm
Em Spawn eu faço:
<code>
.
.
.
use Microspider::Exceptions;
use Error qw(:try);
Microspider::Exceptions::invoke('Spawn'); #Carrega apenas o conjunto de exceções que eu preciso
.
.
.
sub loadSpawnArq {
my ($self,$file_name) = @_;
my $spawn_index;
$file_name =~ s/\.pl//g;
sleep(2);
try {
open my $fh,"<","../data/".$file_name.".ctl" or throw Microspider::Exceptions::Spawn::loadSpawnArq
-text=>$!,-errortarget=>$file_name ;
.
.
.
}
catch Microspider::Exceptions::Spawn::loadSpawnArq with {
my $ex = shift;
print $ex->stringify;
};
.
.
.
}
</code>
Em Exceptions.pm: #Aqui acho que se entende o que eu pretendo:
<code>
package Microspider::Exceptions;
=head2 invoke
Carrega a lista de classes de exceção que serão utilizadas dentro de um módulo.
=cut
sub invoke {
my @classes = @_;
require UNIVERSAL::require;
foreach my $class(@classes) {
my $module = __PACKAGE__.'::'.$class;
}
}
1;
__END__;
</code>
E finalmente em Microspider/Exception/Spawn.pm:
<code>
package Microspider::Exception::Spawn;
use base qw( Error );
sub stringify{
my ($self) = @_;
return "\nERROR <coderr>: ERRO geral em Spawn.pm - $@ - na linha ".$self->{-line};
}
# package Microspider::Exceptions::Spawn::CreateProcess;
# use base qw( Error );
# sub stringify{
# my ($self) = @_;
# return "\nERROR <coderr>: Não foi possível criar o spawn -".$self->{-text}.' - na linha '.$self->{-line};
# }
package Microspider::Exceptions::Spawn::loadSpawnArq;
use base qw( Error );
sub stringify{
my ($self) = @_;
return "\nERROR <coderr>: Não foi possível abrir o arquivo '".$self->{-errortarget}."' - ".$self->{-text}.' -
na linha: '.$self->{-line};
}
1;
__END__
</code>
INC : M:/src/Microspider/Exceptions C:/Perl/site/lib C:/Perl/lib
Cheers!
--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org
Mais detalhes sobre a lista de discussão SaoPaulo-pm