Проблема при использовании thaw для сериализованной структуры данных в Perl
Я использую модуль Perl DB_File, чтобы сохранить хеш-переменную в файле.
Моя хеш-переменная содержит ключ в качестве обычной строки и значение в качестве другой хеш-переменной.
я использовал Storable::freeze(\%value);
сериализовать значение хеша.
Но когда я попытался получить значения, я получил ошибку. Впервые, когда я запускаю код извлечения, он работает. В следующий раз подряд это не удается.
Я использовал такой метод:
tie(%HASH, "DB_File", "dbfile", O_RDWR, 0444);
foreach $key (%HASH)
{
$hashRef = Storable::thaw($HASH{$key}; --> here it fails with the error
}
Сообщение об ошибке
Сохраняемое двоичное изображение v25.47, более свежее, чем я (v2.7) в../../lib/Storable.pm (автоматическое разбиение на../../lib/auto/Storable/thaw.al) строка 366, в строке 15 retrieve.pl в../../lib/Storable.pm (автоматическое разбиение на../../lib/auto/Storable/logcroak.al) строка 74, вызываемая в Storable::logcroak('')../../lib/Storable.pm (автоматически разбивается на строку../../lib/auto/Storable/thaw.al) 367 Storable::thaw('2/8') вызывается в строке retrieve.pl 15
2 ответа
Storable::thaw($HASH{$key};
Вы забыли закрыть ()
Storable::thaw($HASH{$key});
И ты уверен, что тебе нужно оттаивать все ключи? Я думаю, что у вас мало полей, и не все из них должны быть сохраняемыми.
Посмотрите на ошибку:
.... Storable::thaw('2/8') called ....
Значение, которое вы пытаетесь разморозить, является скалярным результатом хеша.
Я предполагаю, что $HASH{$key}
в
$hashRef = Storable::thaw($HASH{$key});
содержит хеш (может быть из замороженных объектов).
Попробуй добавить
use Data::Dumper;
print 'content : '.Dumper $HASH{$key};
прежде чем пытаться разморозить значение, увидеть его содержание.