[SP-pm] Dúvida sobre como "jogar" um array dentro de um hash.

Eden Cardim edencardim at gmail.com
Wed Jul 21 20:02:50 PDT 2010


2010/7/21 "Flávio R. Lopes" <flavio.lopes em links.inf.br>:
>> @temp{@array1, @array2} = 1;
>> @juncao = keys %temp;
>>
>
> Putz, me desculpe Eden, mas ainda não estou neste nível!
> Você poderia "trocar em miúdos" este seu exemplo?

Mapear um array para as chaves de um hash é um truque para eliminar
repetições, e a forma mais prática em termos de código pra fazer isso
é se aproveitar de uma feature do perl chamada "auto-vivificação" e
outra feature chamada "slice". Basicamente, a auto-vivificação
significa que se você fizer uma atribuição a um elemento inexistente
de um hash ou um array, o elemento é criado automaticamente para você.
Um slice é um "pedaço" de um array ou hash, no sentido de que vários
elementos da sua escolha podem ser atribuídos ao mesmo tempo. Assim,
@temp{'foo', 'bar', 'baz', 'foo'} = (1, 2, 3, 4); equivale a
$temp{foo} = 1; $temp{bar} = 2; $temp{baz} = 3; $temp{foo} = 4;
Observa que o elemento repetido foi re-atribuído, então na segunda vez
a chave já existe e o valor é substituído isso evita a criação de
elementos repetidos. Note também que o valor atribuído não interessa,
só queremos criar mesmo as chaves, a atribuição ("= 1") só está lá
para satisfazer o analisador sintático.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/


More information about the SaoPaulo-pm mailing list