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 <[email protected]> > 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... > } > > ¶ms( 'SELF', {aa=>2}, {bb=>3}, {cc=>4} ); > > 2012/12/3 Ulisses Montenegro <[email protected]> > >> 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 <[email protected]> >> >>> 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: [email protected] >>> 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: [email protected] >> 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: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > > -- André Garcia Carneiro Software Engineer (11)982907780
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
