[Rio-pm] [DUVIDA] Chamar função sem declarar construtor

Blabos de Blebe blabos em gmail.com
Terça Abril 29 14:06:38 PDT 2014


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.peczenyj em gmail.com>:

> isto é uma subrotina exportada
>
> onde vc viu
>
> my $p;
>
> $p->algumacoisa;
>
> ?
>
>
> 2014-04-29 17:40 GMT-03:00 Aureliano Guedes <guedes_1000 em hotmail.com>:
>
> #!/usr/bin/perl
>>
>> use strict;
>> use warnings;
>> use Math::Prime::Util ':all';
>>
>> print "ok" if (is_prime($ARGV[0]));
>>
>> ------------------------------
>> From: tiago.peczenyj em gmail.com
>> Date: Tue, 29 Apr 2014 17:36:23 -0300
>> To: rio-pm em 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_1000 em 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 em 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 em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em 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 em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20140429/ecec2462/attachment.html>


Mais detalhes sobre a lista de discussão Rio-pm