[SP-pm] Sinal de metodo nao existente

Luis Motta Campos luismottacampos em yahoo.co.uk
Sexta Abril 25 10:56:16 PDT 2008


Lucas Mateus wrote:
> BEGIN é o único bloco executado antes do Parse do codigo. Tks pela 
> disposição.
> 

Nisso, você está certo:

champs em rugzak:~$ perl -e 'BEGIN{ exit 15; } this is a syntax error;'
champs em rugzak:~$ echo $?
15

Agora, o que você está querendo fazer é alterar a sintaxe do Perl de 
alguma forma para que ele consiga fazer parse do método que não existe...

Você pode sempre definir a sub:

BEGIN{
   package Net::FTP;
   sub abcd;
}

Outra solução é tentar sobrecarregar o AUTOLOAD correspondente. Como 
Net::FTP não tem AUTOLOAD, você pode definir um você mesmo:

BEGIN{
   package Net::FTP;
   sub AUTOLOAD {
   # ...
   }
   # É preciso sobrecarregar __PACKAGE__::can(), também:
   sub can {
     if( $I_can_handle ){
         return $method;
     }else{
         return SUPER::can();
     }
   }
}

Assim, você consegue fazer o que você está querendo.

Lembre-se de que a chamada de método não dá erro de sintaxe, ela vai ser 
resolvida apenas quando o Perl estiver para executar aquele código.

Espero que isso te dê idéias...
Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


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