<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
<div><br></div>coloque o seguinte no seu código...<div><br></div><div>use lib '/path/para/diretório/arquivos/.pm';</div><div><br></div><div>... e descomente o require.</div><div>Acredito que isso deve funcionar.<br><br></div><div>Ua,<br><br><font face="Verdana">Daniel Vinciguerra - Developer<br><a href="http://github.com/dvinciguerra" target="_blank">http://github.com/dvinciguerra</a><br></font><div class="ecxvimiumHUD" style="right:150px;zoom:100%"><br></div><br><br><br><br>&gt; Date: Tue, 7 Dec 2010 16:02:47 -0200<br>&gt; From: mantovani@perl.org.br<br>&gt; To: cascavel-pm@pm.org<br>&gt; Subject: Re: [Cascavel-pm] Reflexão em Perl<br>&gt; <br>&gt; Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que<br>&gt; está fazendo o require ?<br>&gt; <br>&gt; 2010/12/7 Tom Mostard &lt;capmostarda@gmail.com&gt;:<br>&gt; &gt;<br>&gt; &gt; Daniel,<br>&gt; &gt; Obrigado pela ajuda! Mas aqui continuar sem solução.<br>&gt; &gt;<br>&gt; &gt; package Foo;<br>&gt; &gt;<br>&gt; &gt; sub new { return bless {}, shift }<br>&gt; &gt; sub method { my $self = shift; print "Work!\n" }<br>&gt; &gt;<br>&gt; &gt; 1;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; package main;<br>&gt; &gt;<br>&gt; &gt; my ( $class, $method ) = ( 'Foo', 'method' );<br>&gt; &gt; # require $class;<br>&gt; &gt; $class-&gt;new-&gt;$method;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; Quando uso o require acima, tenho a seguinte mensagem:<br>&gt; &gt; Can't locate Foo in @INC (@INC contains: /etc/perl<br>&gt; &gt; /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5<br>&gt; &gt; /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10<br>&gt; &gt; /usr/local/lib/site_perl .) at ./main.pl line 6.<br>&gt; &gt;<br>&gt; &gt; Se eu comento o "require", tenho a seguinte mensagem:<br>&gt; &gt; Can't locate object method "new" via package "Foo" (perhaps you forgot to<br>&gt; &gt; load "Foo"?) at ./main.pl line 7.<br>&gt; &gt;<br>&gt; &gt; Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem o<br>&gt; &gt; Moose. Queria resolver isso sem usá-los, se for possível.<br>&gt; &gt; Se uso as duas classes num único arquivo, funciona, mas minha intenção é<br>&gt; &gt; usar uma classe externa, que pode variar conforme a necessidade.<br>&gt; &gt;<br>&gt; &gt; Mais uma vez, obrigado.<br>&gt; &gt;<br>&gt; &gt; Tom<br>&gt; &gt;<br>&gt; &gt; Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani<br>&gt; &gt; &lt;mantovani@perl.org.br&gt; escreveu:<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou<br>&gt; &gt;&gt; deixar só a última recomendação,<br>&gt; &gt;&gt; http://en.wikipedia.org/wiki/Metaprogramming<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; Eu gostaria de falar muito mais sobre reflexão e introspecção, mas<br>&gt; &gt;&gt; preciso trabalhar.<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; Boa noite.<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; 2010/12/7 Daniel de Oliveira Mantovani &lt;mantovani@perl.org.br&gt;:<br>&gt; &gt;&gt; &gt; Ops, esqueci de colocar o link do manual do Moose,<br>&gt; &gt;&gt; &gt; http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt; Só para ficar mais claro, você pode usar toda a magia do Moose e ainda<br>&gt; &gt;&gt; &gt; abusar de reflexão e introspecção, com Class::Mop.<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt; 2010/12/7 Daniel de Oliveira Mantovani &lt;mantovani@perl.org.br&gt;:<br>&gt; &gt;&gt; &gt;&gt; Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão<br>&gt; &gt;&gt; &gt;&gt; e introspecção:<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt; use Some::Class;<br>&gt; &gt;&gt; &gt;&gt; use Class::MOP;<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt; my $meta = Class::MOP::Class-&gt;initialize('Some::Class');<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt; for my $meth ( $meta-&gt;get_all_methods ) {<br>&gt; &gt;&gt; &gt;&gt; &nbsp; &nbsp;print $meth-&gt;fully_qualified_name, "\n":<br>&gt; &gt;&gt; &gt;&gt; }<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt; 2010/12/7 Daniel de Oliveira Mantovani &lt;mantovani@perl.org.br&gt;:<br>&gt; &gt;&gt; &gt;&gt;&gt; 2010/12/7 Tom Mostard &lt;capmostarda@gmail.com&gt;:<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Colegas,<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Alguém sabe como carregar uma classe que não foi carregada com "use"<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; através<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; de reflexão computacional?<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; package Foo;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; sub new { return bless {}, shift }<br>&gt; &gt;&gt; &gt;&gt;&gt; sub method { my $self = shift; print "Work!\n" }<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; 1;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; package main;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; my ( $class, $method ) = ( 'Foo', 'method' );<br>&gt; &gt;&gt; &gt;&gt;&gt; $class-&gt;new-&gt;$method;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; __END__<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; Outro exemplo, http://nopaste.snit.ch/26735<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Sei que Perl suporta, mas não estou conseguindo implementar.<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Exemplo:<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; my $class &nbsp;= "Foo";<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; my $method = "hello";<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; my $object = $class-&gt;new();<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; $object-&gt;$method(); // que e o mesmo que $object-&gt;hello();<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Preciso usar o EXPORT ou coisa assim?<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; Não, você não precisa do Export. Você pode usar "do" ou &nbsp;"require".<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; package main;<br>&gt; &gt;&gt; &gt;&gt;&gt; use strict;<br>&gt; &gt;&gt; &gt;&gt;&gt; use warnings;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; my %cm = (qw/Foo read Bar people Baz should/);<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; foreach my $class ( ( sort keys %cm ) ) {<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; &nbsp; &nbsp;require $class;<br>&gt; &gt;&gt; &gt;&gt;&gt; &nbsp; &nbsp;my $method = $cm{$class};<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; &nbsp; &nbsp;$class-&gt;new-&gt;$method;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; }<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; Uma das utilidades do "require", é quando você precisa carregar um<br>&gt; &gt;&gt; &gt;&gt;&gt; módulo em tempo de execução, que é o seu caso.<br>&gt; &gt;&gt; &gt;&gt;&gt; Na verdade, tanto "use" como "require" usam o "do". Ambos são uma<br>&gt; &gt;&gt; &gt;&gt;&gt; abstração.<br>&gt; &gt;&gt; &gt;&gt;&gt; http://perldoc.perl.org/functions/do.html<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; O erro que tenho é o seguinte:<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Can't locate object method "new" via package "Foo" (perhaps you<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; forgot to<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; load "Foo"?) at ./main.pl line 10.<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Mas se eu uso o "use Foo" funciona.<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Abraços,<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Tom<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; _______________________________________________<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Cascavel-pm mailing list<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; Cascavel-pm@pm.org<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt; http://mail.pm.org/mailman/listinfo/cascavel-pm<br>&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;&gt; --<br>&gt; &gt;&gt; &gt;&gt;&gt; "If you’ve never written anything thoughtful, then you’ve never had<br>&gt; &gt;&gt; &gt;&gt;&gt; any difficult, important, or interesting thoughts. That’s the secret:<br>&gt; &gt;&gt; &gt;&gt;&gt; people who don’t write, are people who don’t think."<br>&gt; &gt;&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;&gt; --<br>&gt; &gt;&gt; &gt;&gt; "If you’ve never written anything thoughtful, then you’ve never had<br>&gt; &gt;&gt; &gt;&gt; any difficult, important, or interesting thoughts. That’s the secret:<br>&gt; &gt;&gt; &gt;&gt; people who don’t write, are people who don’t think."<br>&gt; &gt;&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt; --<br>&gt; &gt;&gt; &gt; "If you’ve never written anything thoughtful, then you’ve never had<br>&gt; &gt;&gt; &gt; any difficult, important, or interesting thoughts. That’s the secret:<br>&gt; &gt;&gt; &gt; people who don’t write, are people who don’t think."<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; --<br>&gt; &gt;&gt; "If you’ve never written anything thoughtful, then you’ve never had<br>&gt; &gt;&gt; any difficult, important, or interesting thoughts. That’s the secret:<br>&gt; &gt;&gt; people who don’t write, are people who don’t think."<br>&gt; &gt;&gt; _______________________________________________<br>&gt; &gt;&gt; Cascavel-pm mailing list<br>&gt; &gt;&gt; Cascavel-pm@pm.org<br>&gt; &gt;&gt; http://mail.pm.org/mailman/listinfo/cascavel-pm<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; _______________________________________________<br>&gt; &gt; Cascavel-pm mailing list<br>&gt; &gt; Cascavel-pm@pm.org<br>&gt; &gt; http://mail.pm.org/mailman/listinfo/cascavel-pm<br>&gt; &gt;<br>&gt; <br>&gt; <br>&gt; <br>&gt; -- <br>&gt; "If you’ve never written anything thoughtful, then you’ve never had<br>&gt; any difficult, important, or interesting thoughts. That’s the secret:<br>&gt; people who don’t write, are people who don’t think."<br>&gt; _______________________________________________<br>&gt; Cascavel-pm mailing list<br>&gt; Cascavel-pm@pm.org<br>&gt; http://mail.pm.org/mailman/listinfo/cascavel-pm<br></div>                                               </body>
</html>