在perl中对序列化数据结构使用解冻时遇到麻烦

时间:2013-02-01 11:17:52

标签: perl perl-data-structures storable

我正在使用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)at   ../../lib/Storable.pm(autosplit into ../../lib/auto/Storable/thaw.al)   第366行,在retrieve.pl第15行,在../../lib/Storable.pm(autosplit   进入../../lib/auto/Storable/logcroak.al)第74行   Storable :: logcroak('')在../../lib/Storable.pm上调用(autosplit into   ../../lib/auto/Storable/thaw.al)line 367 Storable :: thaw(' 2/8')叫   在retrieve.pl第15行

2 个答案:

答案 0 :(得分:0)

看一下错误:

.... Storable::thaw('2/8') called ....

您尝试解冻的值是哈希值的标量结果。

我认为

中的$HASH{$key}
$hashRef = Storable::thaw($HASH{$key});

包含一个哈希值(可能是冻结的对象)。

尝试添加

use Data::Dumper;
print 'content : '.Dumper $HASH{$key};

在尝试解冻该值之前,先查看其内容。

答案 1 :(得分:0)

Storable::thaw($HASH{$key};

你忘了关闭()

Storable::thaw($HASH{$key});

你是否真的需要解冻所有钥匙? 我认为你的领域很少,而且并非所有领域都必须是可以存储的。