[SP-pm] Dúvida com Hash Slices

Thiago Glauco Sanchez thiagoglauco at ticursos.net
Sun Jul 25 16:46:08 PDT 2010


Em 25/07/2010 20:12, Thiago Glauco Sanchez escreveu:
> Em 25/07/2010 12:26, Eden Cardim escreveu:
>>>>>>> "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:
>>
> Tem sim. Não se esqueça que no Perl %array e @array são dois tipos de 
> dados diferentes e duas variaveis diferentes:
Oppps, tá certo. Confundi a resposta do Eden. Agora lendo mais devagar, 
acabei de ver que disse o mesmo que o Eden. Sorry!
Bom, foi mais um exemplo para quem tinha dúvida.
>
> @array = ('a'..'z'); #é um array
> @array{'a','b', 'c'} = (1,2,3); #é um hash slice somente por causa dos 
> { }, se fossem [ ] seria um array slice
>
> print $array[0],"\n"; #evoca o array
> print $array{a},"\n"; #evica o hash
> map{print "$_ "} keys @array; #indices do array
> print "\n";
> map{print "$_ "} sort keys %array; #chaves do hash
>
> saída:
>
> a
> 1
> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
> a b c
>
>> @{$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
>
>


-- 
What is the sound of Perl? Is it not the sound of a wall that people have
stopped banging their heads against?
—Larry Wall

Thiago Glauco Sanchez
Intrutor Perl e Redes
www.ticursos.net



More information about the SaoPaulo-pm mailing list