[SP-pm] Dúvida com Hash Slices

Eden Cardim edencardim at gmail.com
Sun Jul 25 16:51:03 PDT 2010


>>>>> "Thiago" == Thiago Glauco Sanchez <thiagoglauco em ticursos.net> writes:
    Thiago> Tem sim.

Tem não.

    Thiago> Não se esqueça que no Perl %array e @array são dois
    Thiago> tipos de dados diferentes e duas variaveis diferentes:    
    Thiago> @array = ('a'..'z'); #é um array
    Thiago> @array{'a','b', 'c'} = (1,2,3); #é um hash slice somente por causa dos { }, se fossem [ ] seria um array slice

Repetindo:

    Eden> Na verdade, os parênteses são apenas para forçar precedência e
    Eden> não tem relação alguma com tipos de dados. Perl faz a
    Eden> diferenciação entre referências para arrays e hashes pela
    Eden> presença de '{}' ou '[]' como indexador

Para esclarecer mais ainda, os operandos do operador de atribuição não
tem vínculo algum, no caso de:

@array = ('a'..'z');

Quem constrói a lista é o operador '..', e quem determina o tipo de dado
onde a lista vai ser armazenada é o sigil, do lado esquerdo. Os
parênteses nem são necessários nesse caso, já que o operador de intevalo
('..') não é associativo e tem maior precedência sobre o operador de
atribuição ('='), experimenta:

@array = 'a'..'z' # é um array por causa do sigil da variável

Não tem parêntese algum aí, e mesmo assim tudo funciona perfeitamente,
por conta do que eu acabei de explicar.


More information about the SaoPaulo-pm mailing list