[SP-pm] Dúvida com Hash Slices

Andre Carneiro andregarciacarneiro at gmail.com
Sun Jul 25 08:14:49 PDT 2010


Eu preferi não exemplificar com referências para você não se confundir. Mas
o conceito é o mesmo. Você só precisa tomar cuidado com as referências
porque elas não tem o valor diretamente. Logo vc não pode interagir com
referências da mesma maneira que um array ou hash propriamente dito, ex:

No seu exemplo, o conceito foi aplicado corretamente para a referência,
porque a referência para array foi de-referenciada com '@{$array_ref}'. É
isso aí!





Cheers!


2010/7/25 Renato Santos <renato.cron at gmail.com>

> value Ricardo Bittencourt, estou usando o ideone!
>
> Então, basicamente, o perl sabe que vai mudar o valor do HASH (mesmo usando
> uma @ antes), eu acho, que é porque tem as chaves depois, assim ele sabe que
> tem que acessar como se fosse um HASH, e nao como array (pois seriam
> colchetes):
>
> Agora mudando um pouco o assunto,
>  Eu fico muito chateado de nao poder fazer isso:
>
> use strict;use warnings;use diagnostics;use Data::Dumper;
>  my $array_ref = [ <http://perldoc.perl.org/functions/undef.html>]; # ou =undef, tanto fazmy $string_to_split = q <http://perldoc.perl.org/functions/q.html>{some data to split <http://perldoc.perl.org/functions/split.html>};@{$array_ref} = split <http://perldoc.perl.org/functions/split.html> (/\s/, $string_to_split);print <http://perldoc.perl.org/functions/print.html> Dumper $array_ref;
>
>
>
> Oras bolas, funcionou. Deve ser a versao do perl (5.8.?) diferentes na
> minha empresa. Ou era outro comando, (nao o split, e sim o sort)
>
> Eu particularmente prefiro usar referencias tanto para array tanto para
> HASH, fica muito mais limpo passar por parametros (sem precisar usar \)
> Nao percebi nenhuma piora na perfomance.
>
>
> 2010/7/25 Andre Carneiro <andregarciacarneiro at gmail.com>
>
> Desculpe ...
>>
>> Esse trecho:
>>
>> e também é a mesma coisa que:
>>
>>
>> my %lista  = (banana => 5 ,
>>                    laranhas => 10 ,
>>                    melões => 15
>>                  );
>>
>>
>>
>> Era para ser assim:
>>
>> e também é a mesma coisa que:
>>
>>
>> my %quantidade  = (banana => 5 ,
>>                    laranhas => 10 ,
>>                    melões => 15
>>                  );
>>
>>
>> Em 25 de julho de 2010 09:14, Andre Carneiro <
>> andregarciacarneiro at gmail.com> escreveu:
>>
>> INTRODUÇÃO:
>>>
>>>
>>> A palavra chave para você entender isso é LISTA. Você pode se referir a
>>> LISTAS de várias maneiras:
>>>
>>> my %lista  = (banana => 5 ,
>>>                    laranhas => 10 ,
>>>                    melões => 15
>>>                  );
>>>
>>> ou
>>>
>>> my %lista  = (banana , 5 , laranjas, 10, melões , 15);
>>>
>>>
>>> ou
>>>
>>> my %lista = qw / banana 5 laranjas 10 melões 15 /;
>>>
>>>
>>> etc...
>>>
>>>
>>> São todos LISTAS para Perl, acessíveis em forma de hash ou array( você
>>> precisa escolher um ). No entanto, Perl tem a flexibilidade de poder
>>> interpretar um array para montar um hash, e vice-versa. Nesse caso em que
>>> estamos montando um hash através de um array, o primeiro valor do array é a
>>> chave, e o segundo é o valor dessa chave, e assim por diante. Se o último
>>> valor estiver faltando( ex: my %lista = (1,'um',2) ), o último valor vem
>>> como 'undef' no hash.
>>>
>>>
>>> my @frutas = qw / bananas laranjas melões /;
>>> my @unidades = qw / 5 10 15 /;
>>>
>>> %quantidade{ @frutas } = @unidades;
>>>
>>> É a mesma coisa que:
>>>
>>>
>>> my %quantidade  = (banana , 5 , laranjas, 10, melões , 15);
>>>
>>>
>>> e também é a mesma coisa que:
>>>
>>>
>>> my %lista  = (banana => 5 ,
>>>                    laranhas => 10 ,
>>>                    melões => 15
>>>                  );
>>>
>>>
>>>
>>> capito?
>>>
>>>
>>>
>>>
>>> OBS1: No entanto é preciso deixar claro que, no seguinte caso abaixo:
>>>
>>> my %lista = (banana , 5 , laranjas, 10, melões , 15);
>>>
>>> e
>>>
>>> my @lista = (banana , 5 , laranjas, 10, melões , 15);
>>>
>>>
>>> SERIAM VARIÁVEIS DIFERENTES!!!
>>>
>>>
>>>
>>>
>>> RESPONDENDO AS PERGUNTAS
>>>
>>>
>>>
>>>
>>>
>>> 1) São todos LISTAS para Perl, independentemente se são 'arrays' ou
>>> 'hashes'. São apenas maneiras diferentes de se referir a listas;
>>>
>>> 2) Sim, pode. O 'hash' %quantidade é 'montado' a partir de duas LISTAS:
>>> @quantidade e @frutas. O interpretador se vira com isso( Veja a introdução
>>> ).
>>>
>>>
>>>
>>>
>>> Mais detalhes? Leia aqui:
>>> http://perldoc.perl.org/perldata.html#List-value-constructors e depois
>>> traga suas dúvidas   ;-) .
>>>
>>>
>>>
>>>
>>>
>>> Cheers!
>>>
>>>
>>>
>>>
>>> 2010/7/24 "Flávio R. Lopes" <flavio.lopes at links.inf.br>
>>>
>>>>  Olá pessoal, tudo bem?
>>>>
>>>>
>>>> Seguinte, estou tendo certa dificuldade para entender sobre Hash Slices.
>>>>
>>>> Vi um exemplo de Hash Slices  no livro que estou lendo e tentei montar
>>>> um para tentar entender o funcionamento:
>>>>
>>>>     my %quantidade;
>>>>
>>>>     my @frutas = qw / bananas laranjas melões /;
>>>>     my @unidades = qw / 5 10 15 /;
>>>>     @quantidade{ @frutas } = @unidades;
>>>>
>>>>     foreach my $frutas ( @frutas ) {
>>>>         say "Eu comprei $quantidade{$frutas} $frutas"
>>>>     }
>>>>
>>>> Minhas dificuldade são:
>>>> 1)
>>>> Como o Perl "sabe" que "@quantidade" refere-se ao hash "%quantidade"  ?
>>>> Por exemplo, se houvesse um outro array "*@quantidade* = qw/ 1 2 /"
>>>> porque não causa confusão com "*@quantidade*{ @frutas } = @unidades" ?
>>>>
>>>> 2)
>>>> Na linha: @quantidade{ @frutas } = @unidades;
>>>> ## Posso entender que é aqui que é "montado" o hash "%quantidade"  ?
>>>>
>>>> Onde:
>>>> Para cada chave: *@quantidade{ @frutas }*
>>>> É atribuído um valor: *@unidades*
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm at pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>
>>>
>>>
>>>
>>> --
>>> André Garcia Carneiro
>>> Analista/Desenvolvedor Perl
>>> (11)82907780
>>>
>>
>>
>>
>> --
>> André Garcia Carneiro
>> Analista/Desenvolvedor Perl
>> (11)82907780
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>
>
> --
> Renato Santos
> http://www.renatocron.com/blog/
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
(11)82907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100725/40fd6e84/attachment.html>


More information about the SaoPaulo-pm mailing list