Obrigado a todos que responderam!<br><br>Então... Frederico, é tipo um plugin mesmo, mas é um plugin para o objeto, como o Eden mostrou. Olhei o Module::Pluggable mas ele não faz o que quero, pois o método seria dinâmico.<br>
<br>A lógica do meu objeto seria:<br><br>1) tenho X "plugins" carregados<br>2) recebi uma chamada para método inexistente na minha interface ( $objeto->foo(), $objeto->bar(), ... )<br>3) Passo essa chamada para meus plugins<br>
<br>Acho que foi isso que o Eden explicou (preciso estudar esse AUTOLOAD). Agora com os comentários (especialmente Eden e Adriano) pensei em uma alternativa mais elegante (?):<br><br>1) carrego X "plugins" durante o "import" da minha classe<br>
2) cada um deles anexa seu código à minha Classe, e agora um my $objeto = Classe->new() fará o objeto ter todos os métodos existentes não só nele como em cada plugin.<br><br>Ninguém nunca teve esse problema? Será que estou "viajando" (não programo OO há muito tempo, desculpem qualquer coisa)? Existe outra forma (mais elegante) ou pattern em Perl para atingir os mesmos resultados?<br>
<br>Se houver uma forma de "capturar" e tratar chamadas a métodos inexistentes ao meu objeto, posso usar o Module::Pluggable para resolver meu problema...<br><br><br>Vlw,<br><font color="#888888"><font color="#888888"><br>
PH</font>
</font><br><br><br><div class="gmail_quote">2008/11/6 Eden Cardim <span dir="ltr"><<a href="mailto:edencardim@gmail.com">edencardim@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2008/11/6 Solli Honorio <<a href="mailto:shonorio@gmail.com">shonorio@gmail.com</a>>:<br>
<div class="Ih2E3d">> Eden, o 'use base' não resolve o problema ?<br>
<br>
</div>Bom, levando ao pé da letra, não. Ele disse que quer adicionar um<br>
método ao objeto, e 'use base' vai adicionar à classe. Em JavaScript<br>
você faria:<br>
<br>
foo = new Object;<br>
<br>
foo.meth = function () { alert('foo') };<br>
foo.meth()<br>
<br>
bar = new Object;<br>
<br>
bar.meth = function () { alert('bar') }<br>
bar.meth()<br>
<br>
Por esse motivo, JavaScript é realmente orientado a objetos, a maioria<br>
das outras linguagens que alegam ser orientadas a objetos na verdade<br>
são orientadas a classes, inclusive Java e Python. Perl também é<br>
orientado a classes, mas como sempre, dá pra hackear algo parecido :).<br>
<br>
use warnings;<br>
use strict;<br>
<br>
package Object;<br>
<br>
use Carp;<br>
<br>
sub new {<br>
return bless {}, shift;<br>
}<br>
<br>
sub AUTOLOAD {<br>
my($self) = @_;<br>
our $AUTOLOAD;<br>
my $meth = (split /::/, $AUTOLOAD)[-1];<br>
my $code = $self->{$meth};<br>
if(ref $code eq 'CODE') {<br>
goto &$code;<br>
}<br>
croak "couldn't find $meth via package ${\ref $self}";<br>
}<br>
<br>
package main;<br>
$\ = $/;<br>
<br>
my $foo = Object->new;<br>
$foo->{method} = sub { print 'Oi, eu sou um método que só existe em $foo' };<br>
my $bar = Object->new;<br>
$bar->{method} = sub { print 'Oi, eu sou um método que só existe em $bar' };<br>
<br>
for($foo, $bar) {<br>
$_->method;<br>
}<br>
$foo->some_other_method;<br>
<br>
Se você usar herança, o mesmo método em dois objetos diferentes da<br>
mesma classe vai invocar o mesmo código.<br>
<br>
ALERTA: não use isso a não ser que você saiba *BEM* o que está fazendo :)<br>
<div class="Ih2E3d"><br>
> Pedro eu não entendi bem o teu problema, mas se for relacionado a herança,<br>
> você pode encontrar informações no 'perldoc perlboot'.<br>
<br>
</div>É, eu também não entendi muito bem porque ele quer fazer isso,<br>
provavelmente ele quer Module::Pluggable como o Frederico falou.<br>
<font color="#888888"><br>
--<br>
Eden Cardim Need help with your Catalyst or DBIx::Class project?<br>
Code Monkey <a href="http://www.shadowcat.co.uk/catalyst/" target="_blank">http://www.shadowcat.co.uk/catalyst/</a><br>
Shadowcat Systems Ltd. Want a managed development or deployment platform?<br>
<a href="http://edenc.vox.com/" target="_blank">http://edenc.vox.com/</a> <a href="http://www.shadowcat.co.uk/servers/" target="_blank">http://www.shadowcat.co.uk/servers/</a><br>
</font><div><div></div><div class="Wj3C7c">_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br>