Проблема при использовании 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};

прежде чем пытаться разморозить значение, увидеть его содержание.

Другие вопросы по тегам