【问题标题】:Trouble while using thaw on the serialized data structure in perl在 perl 中对序列化数据结构使用解冻时出现问题
【发布时间】:2013-02-01 11:17:52
【问题描述】:

我正在使用 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 行,retrieve.pl 第 15 行 ../../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 行

【问题讨论】:

    标签: perl perl-data-structures storable


    【解决方案1】:

    看看错误:

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

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

    我假设$HASH{$key}

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

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

    尝试添加

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

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

    【讨论】:

      【解决方案2】:
      Storable::thaw($HASH{$key};
      

      你忘了关闭()

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多