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