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

Hernan Lopes hernanlopes at gmail.com
Mon Dec 3 17:06:33 PST 2012


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20121203/3d2553c0/attachment.html>


More information about the SaoPaulo-pm mailing list