[SP-pm] Dúvida com Hash Slices
Andre Carneiro
andregarciacarneiro at gmail.com
Sun Jul 25 05:14:12 PDT 2010
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100725/70779fe5/attachment.html>
More information about the SaoPaulo-pm
mailing list