<div dir="ltr">> <span style="font-family:arial,sans-serif;font-size:13px">café deve ser 'duro'</span><div><br></div><div>TimToady!!!<div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-29 19:12 GMT-03:00 Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span>:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Cara, café não se pode ferver! seu café deve ser 'duro'</div>

<div class="gmail_extra"><br><br><div class="gmail_quote">
2014-04-29 19:01 GMT-03:00 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span>:<div><div><br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Enquanto meu café ferve, aqui vale uma reflexão:<div>

<br></div><div>"Boas práticas" é um conceito flutuante.</div>


<div><br></div><div>Perl é uma linguagem extremamente rica e se desenvolvimento bastante dinâmico. O que era boa prática quando eu aprendi, já não é boa prática hoje. As coisas mudam.</div>

<div><br></div><div><a href="http://perldoc.perl.org/perlhist.html" target="_blank">http://perldoc.perl.org/perlhist.html</a><br></div><div><br></div><div>Embora muita gente fale que Perl é pré-histórico, a versão mais atual foi lançada em janeiro. Se você bobear, você que fica pré-histórico.</div>






<div><br></div><div>[]'s</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-29 18:52 GMT-03:00 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span>:<div>




<div><br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Pacman, copião :)</div><div class="gmail_extra">

<br><br><div class="gmail_quote">2014-04-29 18:50 GMT-03:00 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span>:<div>




<div><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>> <span style="font-family:arial,sans-serif;font-size:13px">que Modulo::funcao dispensa declarar o construtor.</span><div>







<span style="font-family:arial,sans-serif;font-size:13px"><br></span></div></div><div><font face="arial, sans-serif">Não dispensa. Não tem nada a ver. Não misture as coisas.</font></div>
<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Construtor é um conceito associado a um método especial utilizado para inicializar objetos, ou seja, quando você está utilizando uma interface orientada a objetos.</font></div>








<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Em C++, o Construtor tem que ser um método cujo nome é o nome da classe.</font></div><div><font face="arial, sans-serif"><br></font></div>








<div><font face="arial, sans-serif">Em Python é outro padrão.</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Em Perl isso é livre, um construtor, ou seja um inicializador de objetos pode ser qualquer método que eventualmente invoque a sub bless().</font></div>








<div><br></div><div><a href="http://perldoc.perl.org/functions/bless.html" target="_blank">http://perldoc.perl.org/functions/bless.html</a></div><div><br></div><div>Em Perl convencionamos, pra ninguém ficar louco, que o construtor chama-se new. Mas não existe palavra reservada ou obrigatoriedade nisso.</div>








<div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px">Modulo::funcao() é uma chamada 'procedural' aplicando o namespace completo FQN.</span> Não tem nada a ver com objetos, ou construtores.</div>








<div><br></div><div>***</div><div><br></div><div>No seu caso, como bem observado pelo Junior, o que você quer é não ter que passar o namespace completo, por isso o uso do Exporter, que nada mais faz do que tornar a sua função conhecida no namespace atual.</div>








<div><br></div><div>Exporter também não tem nada a ver com objetos.</div><div><br></div><div>A boa prática é usar @EXPORT_OK pra não exportar todos os símbolos por default. Nesse caso, ao usar o seu módulo você precisa fazer:</div>








<div><br></div><div>use Modulo qw{ funcao };</div><div><br></div><div>Aqui, "boa prática" significa basicamente, "vou tormar o cuidado de exportar apenas o necessário pra não correr risco de dar conflito com outra função de mesmo nome de outro módulo".</div>








<div><br></div><div>Mas é só uma politica de boa vizinhança, não quer dizer, necessariamente, errado. Depende do seu contexto.</div><div><br></div><div>***</div><div><br></div><div>Como em Perl as coisas são mais livres, você vai ver casos de um package que tem construtor, métodos *E* funções comuns, ou seja, tanto uma interface OO quanto procedural. Exemplo: <a href="https://metacpan.org/pod/String::Trigram" target="_blank">https://metacpan.org/pod/String::Trigram</a></div>








<div><br></div><div>Antigamente, quando OO era 'novidade', o pessoal costumava publicar uma interface OO *E* uma interface procedural, pra ficar ao gosto do cliente escolher. Outro exemplo: <a href="https://metacpan.org/pod/CGI" target="_blank">https://metacpan.org/pod/CGI</a></div>








<div><br></div><div>Por essas e outras, *EU*, acho meio confuso ter Perl como primeira linguagem, pois ela te dar liberdades que em não tendo todos os conceitos bem sedimentados, *pode* confundir.</div><div><br></div><div>








O importante é, em estar estudando, não parar no estágio "ah consegui fazer" mas sim prosseguir pelo menos até o "ah, entendi como funciona".</div><div><br></div><div>[]'s </div><div><br></div><div>








<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-29 18:32 GMT-03:00 Aureliano Guedes <span dir="ltr"><<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>></span>:<div>







<div><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<div><div dir="ltr">Funcionou da forma que o Junior passou.<div><br></div><div>Obrigado.</div><div><br></div><div>Experimentei fazer o dumper como o Bablos falou. Realmente são formas diferentes, sendo que Modulo::funcao dispensa declarar o construtor.<br>








<br><div><hr>From: <a href="mailto:juniiior182@gmail.com" target="_blank">juniiior182@gmail.com</a><br>Date: Tue, 29 Apr 2014 18:15:00 -0300<div><br>To: <a href="mailto:rio-pm@pm.org" target="_blank">rio-pm@pm.org</a><br>








Subject: Re: [Rio-pm]   [DUVIDA] Chamar função sem declarar construtor<br><br></div><div><div><div dir="ltr"><div><div>Hi.<br><br><div>Em 29 de abril de 2014 18:07, Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span> escreveu:<br>










<blockquote style="border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Só mais uma coisa,<div><br></div><div>Isso não tem nada a ver com Exporter.</div><div>

<br></div><div>[]'s</div></div></blockquote><div><br>Eu acho que ele tá perguntando mesmo como exportar uma sub e torná-la 
possível ser chamada à partir de outro script bastando dar um use no 
módulo, e não como invocar um método estaticamente como eu pensei.<br><br>Creio que o jeito mais roots seria:<br><br><i>package Modulo::Modulo;<br><br>use vars qw(@ISA @EXPORT);<br><br>@ISA    = (qw(Exporter));<br>@EXPORT = qw(acp);<br>










<br>sub acp {</i><br><i>...<br></i><div><i>}</i><br>1;<br><br></div><div>Deste modo, Aureliano, bastará dar um <b>use</b> em Modulo::Modulo e a função acp() estará acessível, assim como no Math::Prime::Util.<br>

<br></div>[]'s<br><br></div><div> _______________________________________________<br></div><blockquote style="border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">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></blockquote></div><br></div></div></div>
<br>_______________________________________________
Rio-pm mailing list
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a></div></div></div></div>                                       </div></div>
<br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">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></blockquote></div></div></div><br></div>
</blockquote></div></div></div><br></div>
</blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">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></blockquote></div></div></div><span><font color="#888888"><br><br clear="all"><div><br>
</div>-- <br><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div>

<div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div><div><div style="text-align:right"><font size="1" color="#333333"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div>




</div><div style="text-align:right"><font size="1" color="#333333"><a href="http://twitter.com/#!/renato_cron" target="_blank">@renato_cron</a></font></div>
</font></span></div>
<br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">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></blockquote></div><br></div></div></div>