[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