[SP-pm] Dúvida com Hash Slices

Eden Cardim edencardim at gmail.com
Sun Jul 25 08:26:28 PDT 2010


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

    Thiago> O perl sabe que vc se refere a um hash pelas chaves { } e a um array
    Thiago> pelos ( ). Os { } indicam que são chves de um hash e ( )
    Thiago> indicam que são elementos de um array.  Acho que era esta a
    Thiago> sua pergunta?

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

@{$array}[1, 2, 3] = qw(foo bar baz);
@{$hash}{qw(foo bar baz)} = qw(quux moin meep);

O mesmo vale para construção de arrays e hashes anônimos:

my $array = ['foo', 'bar', 'baz'];
my $hash = {'foo', 'quux', 'bar', 'moin', 'baz', 'meep'}

Listas são construídas pelo operador ',', que tem precedência menor que
o operador '=', então, no caso de:

@foo = (1, 2, 3);

Os parênteses estão sendo usados para forçar a construção da lista antes
da atribuição. Se fosse:

@foo = 1, 2, 3;

O resultado seria um array contendo o elemento "1" e uma lista contendo
1, 2, 3 retornada em contexto void.


More information about the SaoPaulo-pm mailing list