[SP-pm] problemas com tratamento de exceções

André Garcia Carneiro andre.garcia.carneir em terra.com.br
Terça Dezembro 18 06:08:23 PST 2007


Salve Monges!

Estou usando o módulo 'Error' para fazer tratamento de exceções, mas estou tendo problemas. Primeiramente vamos
a idéia da 'coisa'.

Eu tenho um módulo q se chama Spawn. Dentro dele eu faço:
.
.
.
use Error qw(:try);
use Microspider::Exceptions::Spawn;
<codigo>

try{
           mais codigo
}
catch Microspider::Exceptions::Spawn::loadSpawnArq with {
   my $ex = shift;
   print $ex->stringify;	
};  

</codigo>

Existe um diretório Exceptions e um arquivo Spawn.pm. Dentro desse arquivo existe a package
Microspider::Exceptions::Spawn::loadSpawnArq. No entanto, perl me retorna a seguinte mensagem:

'cant locate object method "catch" via package "Microspider::Exceptions::Spawn::loadSpawnArq" (perhaps you
forgot to load "Microspider::Exceptions::Spawn::loadSpawnArq" ?) at Microspider::Spawn line 241.


Se eu estou fazendo use em Microspider::Exceptions::Spawn, e a package está lá dentro, deveria carregar, ou não?


O arquivo Microspider::Exceptions::Spawn tem o seguinte:
<code>
package Spawn;
use base qw( Error );

sub load {
# 	use Microspider::Exceptions::Spawn::CreateProcess;
# 	use Microspider::Exceptions::Spawn::loadSpawnArqs;
}

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;

</code>


Eu achei até que deveria ser algum problema com 'use lib', mas não deu certo. Até tentei mudar o nome de Spawn
para Microspider::Exceptions::Spawn, mas o resultado é sempre o mesmo. 

O pior é que eu fiz um script de teste, que simplesmente carregava as exceções em um diretório, de maneira
quase idêntica e funcionou, mas não consigo reproduzir nessa situação em que demonstrei. Se alguém tiver alguma
idéia, ou sugestão de leitura por favor postem.


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