Как получить доступ к данным, хранившим в Хеше

У меня есть этот код:

$coder = JSON::XS->new->utf8->pretty->allow_nonref;
%perl = $coder->decode ($json);

Когда я пишу print %perl переменная это говорит что HASH (0x9e04db0). Как я могу получить доступ к данным в этом ХЕШЕ?

5
задан Jay Gridley 1 March 2010 в 09:22
поделиться

5 ответов

Возвращаемое значение decode не является хешем, и вам не следует назначать его хешу % - когда вы это делаете, вы уничтожаете его значение. Это хэш ссылка и должен быть назначен скаляру. Прочтите perlreftut .

5
ответ дан 18 December 2019 в 08:27
поделиться

Поскольку метод decode фактически возвращает ссылку на хэш, правильный способ присвоения будет выглядеть так:

%perl = %{ $coder->decode ($json) };

Тем не менее, чтобы получить данные из хэша, вы можете использовать встроенную функцию each или перебирать ее ключи и получать значения по индексу.

while (my ($key, $value) = each %perl) {
    print "$key = $value\n";
}

for my $key (keys %perl) {
    print "$key = $perl{$key}\n";
} 
13
ответ дан 18 December 2019 в 08:27
поделиться

Много способов, вы можете использовать цикл foreach

foreach my $key (%perl)
{
  print "$key is $perl{$key}\n";
}

или цикл while

while (my ($key, $value) = each %perl)
{
  print "$key is $perl{$key}\n";
}
-3
ответ дан 18 December 2019 в 08:27
поделиться

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

Например, если% perl hash имеет ключ с именем 'file';

Вы предполагаете получить доступ, как показано ниже

print $ perl {'file'}; # он напечатает значение ключа файла% perl hash

-3
ответ дан 18 December 2019 в 08:27
поделиться

JSON::XS->decode возвращает ссылку на массив или хэш. Чтобы сделать то, что вы пытаетесь сделать, вам придется сделать следующее:

$coder = JSON::XS->new->utf8->pretty->allow_nonref;
$perl = $coder->decode ($json);

print %{$perl};

Другими словами, вам придется разыменовывать хэш при его использовании.

7
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: