[SP-pm] Dúvida com Hash Slices

Blabos de Blebe blabos at gmail.com
Sun Jul 25 08:43:39 PDT 2010


Além do mais, hashes e arrays tem representações internas bem
distintas. Um hash é basicamente uma tabela, enquanto um array é uma
lista. O Perl sempre vai saber a diferença.

O que pode confundir é que a linguagem Perl fornece alguns 'syntax
sugars' que abstraem e facilitam o intercâmbio te dados entre hashes e
arrays.

Embora dê para fazer isso:

my @array = qw(1 2 3 4);
my %hash = @array;
my @lista = %hash;

Hashes e arrays são internamente bem diferentes. A cada atribuição,
internamente um objeto diferente é acessado e a conversão adequada é
feita de forma transparente.

Abraços

2010/7/25 Eden Cardim <edencardim em gmail.com>:
>>>>>> "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.
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm


More information about the SaoPaulo-pm mailing list