URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4708
[ Назад ]

Исходное сообщение
"хэш хэшей"

Отправлено Леонид Д. , 01-Окт-05 16:31 
Есть глупый вопрос по перлу. Не могу разобраться со ссылками на хэши - пробую создать хэш хэшей таким образом:

#!/usr/bin/perl

for($i=1; $i<10; $i++)
{

    $hash1{$i} = { };

    for($k=10; $k<20; $k++)
    {
        $ref = $hash1{$i};
        $ref{$k} = "smth";
    }
}

а потом его прочитать:

foreach $akey (keys %hash1)
{
    $ref_hash = $hash1{$akey};
    print "$akey\n";

    foreach $bkey (keys %ref_hash)
    {
        print "    $bkey\n";


    }
}


В результате выводятся ключи только %hash1, а ключи тех хэшей, ссылки, на которые он должен бы содержать - нет. Наверное я его неправильно заполнил. Вот только как будет правильно?


Содержание

Сообщения в этом обсуждении
"хэш хэшей"
Отправлено chip , 01-Окт-05 16:55 
>> Вот только как будет правильно?

Ты скажи по-русски чего сделать-то хочешь ?!



"хэш хэшей"
Отправлено Леонид Д. , 01-Окт-05 17:51 
>>> Вот только как будет правильно?
>
>Ты скажи по-русски чего сделать-то хочешь ?!


Нужно сделать так чтоб с каждым ключом первого хэша была ассоциирована ссылка на один из анонимных хэшей. Т.е. должно быть примерно так:

хэш1:
1 => ссылка на хэш2
2 => ссылка на хэш3
3 => ссылка на хэш3
4 => ссылка на хэш5
и т.д.


"хэш хэшей"
Отправлено gr , 01-Окт-05 22:24 
>>>> Вот только как будет правильно?
>>
>>Ты скажи по-русски чего сделать-то хочешь ?!
>
>
>Нужно сделать так чтоб с каждым ключом первого хэша была ассоциирована ссылка
>на один из анонимных хэшей. Т.е. должно быть примерно так:
>
>хэш1:
>1 => ссылка на хэш2
>2 => ссылка на хэш3
>3 => ссылка на хэш3
>4 => ссылка на хэш5
>и т.д.

примерно так
        
#!/usr/bin/perl

for (1..10) {
    %tmphash = (
                1 => 'a',
                2 => 'b',
                3 =>'c'
                );
    $hash{$i++} = \%tmphash;
}

for (keys %hash) {
    print "$_    ", join(',',keys %{$hash{$_}}), "\n";
}


"хэш хэшей"
Отправлено chip , 03-Окт-05 09:32 
>>>> Вот только как будет правильно?
>>
>>Ты скажи по-русски чего сделать-то хочешь ?!
>
>
>Нужно сделать так чтоб с каждым ключом первого хэша была ассоциирована ссылка
>на один из анонимных хэшей. Т.е. должно быть примерно так:
>
>хэш1:
>1 => ссылка на хэш2
>2 => ссылка на хэш3
>3 => ссылка на хэш3
>4 => ссылка на хэш5
>и т.д.

#!/usr/bin/env perl -w

use strict;

my %hash = (
  1 => {  10  =>  100,
          11  =>  110,
          12  =>  120
       },
  2 => {  20  =>  200,
          21  =>  210,
          22  =>  220
       },
  3 => {  30  =>  300,
          31  =>  310,
          32  =>  330
       },
);

foreach my $key (sort(keys %hash)) {
  foreach my $i (sort(keys %{$hash{$key}})) {
    print $hash{$key}->{$i}, " ";
  }
  print "\n";
}