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

Исходное сообщение
"Perl : Array in Hash"

Отправлено Igor , 21-Июн-04 15:34 
Можно ли в Hash добавить массив?

%myhash=();

sub myproc {

  my @myarray=();
  my %myhash2=();
  $myhash2=(num=>"1", text=>"One");
  push(@myarray, \%myhash2);

  # Возможно ли это действие?
  $myhash{'One'} = @myarray;
}
myproc;

# Здесь далее должен быть обработан весь myhash и сохраненные в нем массивы

Насколько я понимаю, в хешах нельзя сохранять массивы?
Спасибо


Содержание

Сообщения в этом обсуждении
"Perl : Array in Hash"
Отправлено Максим аки Фомин , 21-Июн-04 18:43 
>Можно ли в Hash добавить массив?
>
>%myhash=();
>
>sub myproc {
>
>  my @myarray=();
my (@myarray, %myhash2);
>  my %myhash2=();
>  $myhash2=(num=>"1", text=>"One");
>  push(@myarray, \%myhash2);
>
>  # Возможно ли это действие?
>  $myhash{'One'} = @myarray;
>}
>myproc;
>
># Здесь далее должен быть обработан весь myhash и сохраненные в нем
>массивы
>
>Насколько я понимаю, в хешах нельзя сохранять массивы?
:( отчего это ты так решил? Можно и даже нужно ;)
>Спасибо

А смысл так усложнять?

push @{$myhash{One}},[@myarray];
вуаля ..

см. Кэмэл г.9


"Perl : Array in Hash"
Отправлено ACCA , 22-Июн-04 00:14 
>Можно ли в Hash добавить массив?

Нельзя. Но можно добавить ссылку на массив. В зависимости от того, что ты хочешь получить (ссылку на анонимную копию массива либо ссылку на массив, чтобы изменения массива были видны через ссылку в hash), можно написать:


>  # Возможно ли это действие?
[...]
>  $myhash{'One'} = @myarray;

$myhash{'One'}=\@myarray;

либо
$myhash{'One'} = [ @myarray ];


>Насколько я понимаю, в хешах нельзя сохранять массивы?

perldoc perldsc
perldoc perlre


"Perl : Array in Hash"
Отправлено 1 , 23-Июн-04 15:21 
да все время хранил в хэшах массивы и в массивах - хэши...
http://www.dimas.ncn.ru/books/perl/perlshelf/cookbook/ch11_0...
http://www.dimas.ncn.ru/books/perl/perlshelf/prog/ch04_07.ht...

просто лабуда у меня иногда возникала, с вложеностью, когда например
хэш1->массив1->хэш2->массив2
хэш1->массив1->строка


"Perl : Array in Hash"
Отправлено ACCA , 16-Июл-04 00:28 
>да все время хранил в хэшах массивы и в массивах - хэши...

В хэшах ты хранишь ссылки на массивы, а в массивах - ссылки на хэши.

Принципиально важно понимать разницу между
[] и () или
{} и ().

Ссылки ты привёл верные, прочти их внимательнее.