[SP-pm] Verificação de parâmetros em métodos

Andre Carneiro andregarciacarneiro at gmail.com
Tue Dec 4 02:54:12 PST 2012


Hummm... acho que fui vago demais!

Vamos ver se consigo me expressar melhor...


A pergunta é a seguinte: tudo o que eu passo de útil para o método
'validated_list' não tem nada a ver com \@_. Então por que eu preciso
passar isso como referência? Referência de que?

Mesmo olhando o código do módulo, não consegui entender direito o que ele
leva nessa referência, e ainda por cima, o método é estático! Que diabos
tem dentro desse \@_ ? E como isso vai parar lá, já que não tem instância
nenhuma do módulo, só um 'use'...(método estático, tá ligado?). Desconfio
que a resposta tenha a ver com o 'use', mas não tenho certeza.


Acho que essa pergunta ficou um pouco 'menos pior'...


Eden???



Cheers!



2012/12/3 Hernan Lopes <hernanlopes at gmail.com>

> O que acontece é o seguinte,
> Veja o exemplo:
>
> use Data::Printer;
>
> sub params {
> ##
> # o usual seria algo assim:
> # my ( $self, $var1, $var2, $varX ) = @_;
>
> ##
> # mas tb é possível fazer assim:
> warn p @_; #tem os parametros acima
> my $self = shift; #tira o primeiro item da lista @_
> warn p @_; #imprime status atual da lista, sem o primeiro item que acaba
> de ser retirado
> my ( $var1, $var2, $varX ) = @_; #associa cada item da lista da esquerda
> ao correspondente na lista @_ da direita
> warn p $var1;
> warn p $var2;
> warn p $varX;
> ##
> # e tambem é possível passar os parametros diretamente para outro metodo
> com \@_:
> # $self->metodo( \@_ );
> # ou, &metodo( \@_ );
> # etc...
> }
>
> &params( 'SELF', {aa=>2}, {bb=>3}, {cc=>4} );
>
> 2012/12/3 Ulisses Montenegro <ulisses.montenegro at gmail.com>
>
>> André,
>>
>> Faz tempo que não brinco com Perl, mas se a memória não falha, existiriam
>> dois motivos legítimos para utilizar um parâmetro por referência (que é o
>> que o \@_ representa, uma referência para o @_):
>>
>> 1. Modificar os valores originais, já que o comportamento padrão de Perl
>> é passagem por valor e não por referência, ou
>> 2. Evitar a cópia dos valores dos parâmetros (nesse caso seria mais uma
>> otimização do que uma necessidade)
>>
>> Como dizem os americanos, I might be putting my foot in my mouth, mas
>> acho que seria isso. Para mais detalhes sobre o uso de referências em Perl,
>> 'perldoc perlref'.
>>
>> []'s
>>
>>
>> 2012/12/3 Andre Carneiro <andregarciacarneiro at gmail.com>
>>
>>>  Boa noite!
>>>
>>>
>>> Estou fazendo uma pesquisa sobre validação de parâmetros em métodos,
>>> para módulos que utilizam Moose. Encontrei a seguinte solução abaixo:
>>>
>>>
>>>
>>>
>>> http://search.cpan.org/~drolsky/MooseX-Params-Validate-0.16/lib/MooseX/Params/Validate.pm
>>>
>>>
>>>
>>> No entanto, tem um detalhe que eu não compreendi. Porque eu preciso
>>> passar \@_ para o método 'validated_list' ?
>>>
>>> Dei uma olhada no código, e vi que ele utiliza o primeiro parâmetro que
>>> é chamado de '$args' dentro do método e existe um algoritmo que faz uma
>>> série de verificações nessa variável e depois envia para validate_with,
>>> através do módulo Params::Validate. Lá descobri que 'validate_with' é um
>>> 'símbolo' que é interpretado como uma sub por um outro método, enfim... Tem
>>> alguém por aqui capaz de me ajudar a entender esta "bagunça" e,
>>> principalmente, porque do \@_ ??
>>>
>>>
>>> OBS: Antes de qualquer troll me interpretar mal, repare que coloquei
>>> 'bagunça' entre aspas, o que significa que não acho que isso realmente seja
>>> uma bagunça. Por favor, evitem comentários inúteis em cima disso! Já me
>>> considero velho e sem saco pra flames...  ;-)
>>>
>>>
>>> Obrigado!
>>>
>>>
>>>
>>>
>>> --
>>> André Garcia Carneiro
>>> Software Engineer
>>> (11)982907780
>>>
>>> =begin disclaimer
>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>>
>>>
>>
>>
>> --
>> “If debugging is the process of removing software bugs, then programming
>> must be the process of putting them in.” - Edsger Dijkstra
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
André Garcia Carneiro
Software Engineer
(11)982907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20121204/07206c10/attachment.html>


More information about the SaoPaulo-pm mailing list