[Rio-pm] hash como parametro

Solli Honorio shonorio em gmail.com
Quarta Junho 30 10:50:39 PDT 2010


Cleive,

2010/6/30 GmailPaqui <cpaqui em gmail.com>

>  Caros, boa tarde!
>
> Estou tendo problemas para passar dois parâmetros para uma sub, um hash e
> um scalar.
>
> SubHashScalar(%hash, $scalar);
>
> sub SubHshScalar () {
>     my (%hash, $scalar) = @_;
>
>     print "@{[ %hash ]}\n";
>     printf "Scalar: %s", $scalar;
> }
>
> O parâmetro scalar não esta sendo configurado, se eu do um print no @_
> imprime o hash e o scalar.
>
> O que estou fazendo de errado?
>
>
Primeiro, não utilize o protótipo, isto é old-fashion e old-school na
programação em Perl e não ajuda em nada atualmente no perl.

Na passagem de parâmetro não é garantido a preservação do tipo de variável.
Então passar uma variável hash não significa que é obrigatória uma variável
hash para que o valor seja recebido. A passagem de parâmetro que você está
fazendo é uma cópia de valores (não vou explicar o que é isto, se isto for
uma dúvida favor perguntar), e aí que está ocorrendo o problema. Como você
está passando uma seqüência de dados { my (%hash, $scalar) = @_ }, o hash (e
aconteceria o mesmo com o array), que é um cara guloso, fica com todos os
dados.

Como já disseram, enquanto eu escrevia este email e garantia o wiskey das
criança, se você inverter a passagem dos valores do parâmetros o problema
não acontecerá.

A maneira mais segura de passar os valores neste caso é via referência, pois
assim você garante se cada scalar (que armazena valores unitários) terá a
referência do agrupamento desejado.

Espero que eu tenha conseguido ser claro na minha explicação, é que estou
tendo muitas interrupções no trabalho e não vou conseguir detalhar tudo
aqui.

Abraços,

Solli M. Honório



>  Obrigado.
> --
>  *Cleive Paqui*
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20100630/094ab3d8/attachment.html>


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