Perl Hash of Hashes Issue - PullRequest
       4

Perl Hash of Hashes Issue

2 голосов
/ 11 июня 2011

Я видел похожие вопросы, задаваемые здесь до тошноты, но ни один из них не мог ответить конкретно на мой собственный вопрос.

Я пытаюсь программно создать хэш хэшей. Мой код проблемы выглядит следующим образом:

my %this_hash = ();
if ($user_hash{$uuid})
{
    %this_hash = $user_hash{$uuid};
}

$this_hash{$action} = 1;

$user_hash{$uuid} = %this_hash;
my %test_hash = $user_hash{$uuid};
my $hello_dumper = Dumper \%this_hash;

Согласно моим выводам, $ this_hash назначается правильно, но

$user_hash{$uuid} = %this_hash

показывает значение 1/8 в отладчике; не уверен, что он имеет в виду. Я также получаю предупреждение: "нечетное количество элементов в хэш-присваивании ..."

Ответы [ 2 ]

12 голосов
/ 11 июня 2011

Каждый раз, когда вы пишете

%anything = $anything

, вы делаете что-то не так.Почти каждый раз, когда вы пишете

$anything = %anything

, вы делаете что-то не так.Это включает, когда $anything является массивом или хеш-доступом (то есть $array[$index] или $hash{$key}).Значения, хранящиеся в массивах и хешах, всегда являются скалярами, а сами массивы и хеши не являются скалярами.Таким образом, когда вы хотите сохранить хеш в хеше, вы сохраняете ссылку на него: $hash{$key} = \%another_hash.И когда вы хотите получить доступ к хэшу, ссылка на который хранится в хеш-коде, вы можете разыменовать: %another_hash = %{ $hash{$key} } или $hashref = $hash{$key}; $value = $hashref->{ $another_key } или $value = $hash{$key}{$another_key}.

чтение справочника по Perl и справочника по структурам данных Perl .

5 голосов
/ 11 июня 2011

Это на самом деле не "хэш хэшей"; это «хэш ссылок на хэши».

Попытка:

$user_hash{$uuid} = \%this_hash;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...