У меня есть этот код:
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
%perl = $coder->decode ($json);
Когда я пишу print %perl
переменная это говорит что HASH (0x9e04db0). Как я могу получить доступ к данным в этом ХЕШЕ?
Возвращаемое значение decode
не является хешем, и вам не следует назначать его хешу %
- когда вы это делаете, вы уничтожаете его значение. Это хэш ссылка и должен быть назначен скаляру. Прочтите perlreftut .
Поскольку метод 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";
}
Много способов, вы можете использовать цикл foreach
foreach my $key (%perl)
{
print "$key is $perl{$key}\n";
}
или цикл while
while (my ($key, $value) = each %perl)
{
print "$key is $perl{$key}\n";
}
Вам необходимо указать конкретный ключ хеша, тогда только вы сможете получить доступ к данным из хеша.
Например, если% perl hash имеет ключ с именем 'file';
Вы предполагаете получить доступ, как показано ниже
print $ perl {'file'}; # он напечатает значение ключа файла% perl hash
JSON::XS->decode возвращает ссылку на массив или хэш. Чтобы сделать то, что вы пытаетесь сделать, вам придется сделать следующее:
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
$perl = $coder->decode ($json);
print %{$perl};
Другими словами, вам придется разыменовывать хэш при его использовании.