我正在使用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行
答案 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});
你是否真的需要解冻所有钥匙? 我认为你的领域很少,而且并非所有领域都必须是可以存储的。