[SP-pm] Dúvida com Hash Slices
Renato Santos
renato.cron at gmail.com
Sun Jul 25 07:52:02 PDT 2010
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/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100725/cd8f25b7/attachment.html>
More information about the SaoPaulo-pm
mailing list