4

我正在使用 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 行,在 ../../lib/Storable.pm 的retrieve.pl 第 15 行(自动拆分为 ../../lib/auto/Storable/logcroak.al) 第 74 行 Storable::logcroak('') 调用于 . ./../lib/Storable.pm (autosplit into ../../lib/auto/Storable/thaw.al) 第 367 行 Storable::thaw('2/8') 在 retrieve.pl 第 15 行调用

4

2 回答 2

0

看看错误:

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

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

我假设$HASH{$key}

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

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

尝试添加

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

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

于 2013-02-17T08:23:58.447 回答
0
Storable::thaw($HASH{$key};

你忘记关闭 ()

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

你确定你需要解冻所有的钥匙吗?我认为您的字段很少,并非所有字段都必须是可存储的。

于 2013-02-21T16:28:32.310 回答