<div dir="ltr">Opa,<div><br></div><div>A expressão:</div><div><br></div><div>Modulo::funcao( arg1, arg2 );</div><div><br></div><div>Significa:</div><div><br></div><div>Invoque a função 'funcao' do módulo 'Modulo', passando como argumentos 'arg1', 'arg1' *E* especificando o namespace completo.</div>

<div><br></div><div>Dentro da sub 'funcao' se você fizer algo como:</div><div><br></div><div>sub funcao {</div><div>  use Data::Dumper;</div><div>  warn Dumper \@_</div><div>}</div><div><br></div><div>Vai ver que só existem dois argumentos, 'arg1' e 'arg2', respectivamente.</div>

<div><br></div><div>O que é ligeiramente diferente de:</div><div><br></div><div>Modulo->funcao(arg1, arg2);</div><div><br></div><div>Isso significa, invoque a função 'funcao' do módulo 'Modulo', passando 'arg1' e 'arg2', *MAS*, passe *implicitamente* o nome da "classe" (no caso 'Modulo') como primeiro argumento.</div>

<div><br></div><div>Assim, se você observar o resultado do Dumper, no mesmo código vai ver que agora há *TRÊS* argumentos, e não dois.</div><div><br></div><div>É por isso que existem documentações antigas, onde a invocação do 'construtor' (que convencionamos se chamar new()) pode ser feita assim:</div>

<div><br></div><div>my $obj = new Modulo;</div><div><br></div><div>Vejam, portanto, que são equivalentes sintaticamente:</div><div><br></div><div>my $obj = new Modulo;<br></div><div>my $obj = Modulo->new;<br></div><div>

<br></div><div>Exemplo do caso do Aureliano:</div><div><br></div><div><a href="https://metacpan.org/pod/File::Spec">https://metacpan.org/pod/File::Spec</a><br></div><div><br></div><div>Exemplo de documentação com a forma menos idiomática:</div>

<div><br></div><div><a href="https://metacpan.org/pod/String::Trigram">https://metacpan.org/pod/String::Trigram</a><br></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 17:43 GMT-03:00 Tiago Peczenyj <span dir="ltr"><<a href="mailto:tiago.peczenyj@gmail.com" target="_blank">tiago.peczenyj@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">isto é uma subrotina exportada<div><br></div><div>onde vc viu</div><div><br></div><div>my $p;</div><div><br></div><div>$p->algumacoisa;</div><div><br></div><div>?</div></div><div class="gmail_extra"><br>

<br>

<div class="gmail_quote">2014-04-29 17:40 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 class="h5"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div><div dir="ltr"><div>#!/usr/bin/perl</div><div><br></div><div>use strict;</div><div>use warnings;</div><div>use Math::Prime::Util ':all';</div><div><br></div><div>print "ok" if (is_prime($ARGV[0]));</div>



<br><div><hr>From: <a href="mailto:tiago.peczenyj@gmail.com" target="_blank">tiago.peczenyj@gmail.com</a><br>Date: Tue, 29 Apr 2014 17:36:23 -0300<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<div><div><br><br><div dir="ltr">de exemplos.<div><br></div><div><br></div></div><div><br><br><div>2014-04-29 17:34 GMT-03:00 Aureliano Guedes <span dir="ltr"><<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>></span>:<br>





<blockquote style="border-left:1px #ccc solid;padding-left:1ex">


<div><div dir="ltr">Ola monges,<div><br></div><div>Tenho uma pequena dúvida.</div><div>Quando vamos usar uma função(sub-rotina) de um módulo fazemos na maioria das vezes o seguinte:</div><div><br></div><div>use Modulo::Modulo;</div>





<div><br></div><div>my $p = Modulo::Modulo->new();</div><div>$p->funcao();</div><div>....</div><div><br></div><div>isso porque no modulo tem um contrutor ou foi gerado de presente ao autor quando usado o Moose ou semelhante.</div>





<div><br></div><div>A questão é que alguns poucos módulos permitem que seja feito diretamente</div><div><br></div><div>use Modulo::Modulo;</div><div><br></div><div>my $p;</div><div>$p->funcao();</div><div>....</div><div>





<br></div><div>A dúvida é: como o autor do módulo faz para que permita fazer a chamada das funções sem precisar disso:</div><div>my $p = <span style="font-size:12pt">Modulo::Modulo->new();</span></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><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br>





<br><a href="http://about.me/peczenyj" target="_blank">http://about.me/peczenyj</a>
</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>
<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><div><div class="h5"><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>

Linux User #405772<br>

<br><a href="http://about.me/peczenyj" target="_blank">http://about.me/peczenyj</a>
</div></div></div>
<br>_______________________________________________<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></blockquote></div><br></div>