Основная проблема в том, что вы можете только разыменовать ссылки.Хеш не является ссылкой, поэтому «разыменование хэша» не имеет смысла.
Ваш вывод дампа,
$VAR1 = {
'HASH(0x55948e0b06b0)' => undef
};
не показывает вложенную структуру данных или ссылку или что-либо еще,Это буквально одноэлементный хеш, ключ которого (единственный) является строкой "HASH(0x55948e0b06b0)"
, а значение undef
.Вы ничего не можете сделать с этой структурой.
Вероятно, произошло то, что getVarHash
возвращает ссылку на хеш (одно значение), который (присваивая хешу) вы неявно преобразовали включ, соответствующее значение которого undef
.Хэш-ключи всегда являются строками, поэтому исходное значение ссылки было потеряно.
Perl может рассказать вам об этой конкретной проблеме.Вы всегда должны начинать свои Perl-файлы с
use strict;
use warnings;
Предупреждение для этой конкретной ошибки:
Reference found where even-sized list expected at foo.pl line 123.
Решение состоит в том, чтобы сохранить возвращенную ссылку в скалярной переменной:
my $hash = $vars->getVarHash;
print Dumper($hash);
Затем вы можете использовать все обычные методы (как описано, например, perldoc perlreftut
) для разыменования его и доступа к его содержимому, например keys %$hash
, $hash->{$key}
и т. Д..