Opa, A expressão:
Modulo::funcao( arg1, arg2 ); Significa: Invoque a função 'funcao' do módulo 'Modulo', passando como argumentos 'arg1', 'arg1' *E* especificando o namespace completo. Dentro da sub 'funcao' se você fizer algo como: sub funcao { use Data::Dumper; warn Dumper \@_ } Vai ver que só existem dois argumentos, 'arg1' e 'arg2', respectivamente. O que é ligeiramente diferente de: Modulo->funcao(arg1, arg2); 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. Assim, se você observar o resultado do Dumper, no mesmo código vai ver que agora há *TRÊS* argumentos, e não dois. É por isso que existem documentações antigas, onde a invocação do 'construtor' (que convencionamos se chamar new()) pode ser feita assim: my $obj = new Modulo; Vejam, portanto, que são equivalentes sintaticamente: my $obj = new Modulo; my $obj = Modulo->new; Exemplo do caso do Aureliano: https://metacpan.org/pod/File::Spec Exemplo de documentação com a forma menos idiomática: https://metacpan.org/pod/String::Trigram []'s 2014-04-29 17:43 GMT-03:00 Tiago Peczenyj <tiago.pecze...@gmail.com>: > isto é uma subrotina exportada > > onde vc viu > > my $p; > > $p->algumacoisa; > > ? > > > 2014-04-29 17:40 GMT-03:00 Aureliano Guedes <guedes_1...@hotmail.com>: > > #!/usr/bin/perl >> >> use strict; >> use warnings; >> use Math::Prime::Util ':all'; >> >> print "ok" if (is_prime($ARGV[0])); >> >> ------------------------------ >> From: tiago.pecze...@gmail.com >> Date: Tue, 29 Apr 2014 17:36:23 -0300 >> To: rio-pm@pm.org >> Subject: Re: [Rio-pm] [DUVIDA] Chamar função sem declarar construtor >> >> >> de exemplos. >> >> >> >> >> 2014-04-29 17:34 GMT-03:00 Aureliano Guedes <guedes_1...@hotmail.com>: >> >> Ola monges, >> >> Tenho uma pequena dúvida. >> Quando vamos usar uma função(sub-rotina) de um módulo fazemos na maioria >> das vezes o seguinte: >> >> use Modulo::Modulo; >> >> my $p = Modulo::Modulo->new(); >> $p->funcao(); >> .... >> >> isso porque no modulo tem um contrutor ou foi gerado de presente ao autor >> quando usado o Moose ou semelhante. >> >> A questão é que alguns poucos módulos permitem que seja feito diretamente >> >> use Modulo::Modulo; >> >> my $p; >> $p->funcao(); >> .... >> >> A dúvida é: como o autor do módulo faz para que permita fazer a chamada >> das funções sem precisar disso: >> my $p = Modulo::Modulo->new(); >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm@pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm >> >> >> >> >> -- >> Tiago B. Peczenyj >> Linux User #405772 >> >> http://about.me/peczenyj >> >> _______________________________________________ Rio-pm mailing list >> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm@pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm >> > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ > Rio-pm mailing list > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm >
_______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm