难以解冻使用Storable :: nfreeze存储的数据结构?

时间:2012-12-25 15:52:50

标签: perl storable

我有一堆数据存储在MySQL表的单个列中。我可以访问存储在那里的〜5岁的perl代码。可以看到它是在存储之前用Storable::nfreeze冻结的所有哈希值。 MySQL列为TEXT,表格设置为latin1编码。我现在正试图将这些数据恢复为一次性导出。我知道应用程序最初是在perl 5.8.x上运行的,所以我用perl-5.8.8尝试这个。不幸的是,我不知道使用了什么版本的Storable。

我首先尝试使用最新的Storable,2.39。这让我:

Storable binary image v32.32 more recent than I am (v2.9) at
perlbrew/perls/perl-5.8.8/lib/5.8.8/darwin-2level/Storable.pm line 417`

有了Storable-2.14,我得到了

Storable binary image v32.32 more recent than I am (v2.7) at blib/lib/Storable.pm
(autosplit into blib/lib/auto/Storable/thaw.al) line 363

使用Storable-2.13我得到了

Storable binary image v2.7 more recent than I am (v2.6) at blib/lib/Storable.pm  
(autosplit into blib/lib/auto/Storable/thaw.al) line 363

> = 2.14中的不合理的高二进制图像数字让我觉得数字的解析方式有一些变化。我相信这段代码可能是在32位操作系统上运行的,现在我在64位机器上尝试这个,这可能是相关的吗?接下来是我要尝试在2.13和2.1之间运行差异。 2.14看看我是否能弄清楚是什么导致了这种变化。

任何人都可以提供任何指导吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

格式2.7最初与Storable 2.14一起使用。

Perl整数的大小(不是机器整数的大小)确实会导致无法解析数据。

答案 1 :(得分:0)

我遇到了类似的问题,但事实证明我需要在解冻之前对其进行解码。所以,

use Storable qw( thaw );
use MIME::Base64 qw( decode_base64 );
my $data = thaw( decode_base64( $frozen_thing ) );

在我的例子中,数据已经使用Apache :: Session :: Serialize :: Base64存储。我原以为它是使用Apache :: Session :: Serialize :: Storable存储的,因此存在问题。在这种情况下,错误消息是红色鲱鱼,但至少你知道某些是错误的。