[Cascavel-pm] Reflexão em Perl

breno breno em rio.pm.org
Quinta Dezembro 9 13:27:50 PST 2010


2010/12/7 Daniel Vinciguerra <daniel-vinciguerra em hotmail.com>:
> Isso funciona (certeza!) mas não me parece uma forma muito elegante de se
> resolver o problema!
> my ( $class, $method ) = ( 'Foo', 'method' );
> require $class .".pm";
> $class->new->$method;
> Vou consultar uns docs e depois posto algo mais polido!

Engraçado ninguém ter mencionado o Class::Load

----------8<----------
use Class::Load ':all';

my ($class, $method) = ( 'Minha::Classe', 'meu_metodo' );

load_class $class;

$class->new->$method;
---------->8----------

O 'require' exige nomes de módulos na forma "Class/Name.pm". Para usar
a forma tradicional ("Class::Name") existem módulos como o Class::Load
e o Module::Load - este último funciona da mesma forma, mas oferece
menos opções.

Finalmente, se você tem *certeza* que vai usar todos os módulos que
pretende invocar dinamicamente (ou prefere penalidades durante a
compilação do que durante a execução), pode fazer "use" em todos eles
no inicio do programa, e depois chamar dinamicamente. Por exemplo:

----------8<----------
use Foo;
use Bar;
use Baz;

my ($class, $method) = ( 'Foo', 'meu_metodo' );

$class->new->$method;
---------->8----------

[]s

-b


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