[SP-pm] Módulo

Thomas Britis thomas em tcnet.com.br
Terça Março 6 08:38:31 PST 2007


Boa tarde Luis,

	Obrigado pela resposta e pelo tempo despendido com isso.

	Esta foi apenas uma questão hipotética e com certeza foi um tanto 
quanto confusa minha colocação.

	Na prática o que eu quero é automatizar algumas funções que, por vezes 
tenho que utilizar. Isso inclui acessos à banco de dados ou protolos 
específicos (as vezes utilizando módulos do cpan). Minha dúvida surgiu, 
inicialmente, pela necessidade de tratar o retorno de alguma função do 
módulo de forma diferente.

	Exemplificando:
Em um determinado programa eu preciso fazer uma conexão com um banco de 
dados e, em caso de falha, pouco me importa o porque. Apenas saber que a 
conexão falhou já me basta. E isso eu consigo facilmente utilizando 
valores de retorno da função de conexão ao banco.
Porém, em uma segunda hipótese eu preciso tratar o erro que me é 
retornado. E, sem quebrar a estrutura inicial (utilizando valores 
numéricos de retorno), eu precisaria saber o erro. Então pensei em 
utilizar a mesma estrutura do módulo, algo como:

sub connect {
  my $self = shift;

  if (!connect_to_db()) {
     $self->{mensagem_de_erro} = 'Erro específico';
     return 0;
  }
  return 1;
}

	Com isso eu resolveria os dois problemas. Teria o retorno e a mensagem 
de erro, caso esta fosse necessária.

	Lembre-se que esta é uma situação hipotética e simples. Mas, se eu 
conseguir entender qual a melhor maneira de se fazer isso, terei 
resolvido diversos outros problemas estruturais e poderei começar a 
desenvolver meus módulos tranquilamente.

	Na prática a dúvida é: se eu receber a hash como argumento da função e 
alterá-la, essa alteração terá validade apenas dentro dessa função ou 
dentro da função que a chamou também?

	Ou ainda:
sub connect {
	my $self = shift;

	if (!connect_to_db()) {
		$self->{mensagem_de_erro} = 'Erro';
		return 0;
	}
	return 1;
}

	Teria o mesmo efeito que:
sub connect {
	my $self = shift;

	if (!connect_to_db()) {
		$self->{mensagem_de_erro} = 'Erro';
	}
	return $self;
}
	?????

	Espero ter sido um pouco mais claro agora.
	E, novamente, obrigado pelo tempo perdido com a resposta.

Luis Motta Campos wrote:

-- 
Thomas Storino Britis
TCNet Informatica e Telecomunicacoes LTDA


Mais detalhes sobre a lista de discussão SaoPaulo-pm