2012-12-25 22 views
2

我有一堆数据存储在MySQL表中的单个列中。我可以访问存储在那里的大约5年历史的Perl代码&可以看到它们在被存储之前被Storable::nfreeze冻结的所有哈希。 MySQL列是TEXT,表被设置为latin1编码。我现在试图将这些数据恢复为一次性导出。我知道这个应用最初是在perl 5.8.x上运行的,所以我正在用perl-5.8.8来尝试这个。不幸的是,我不知道使用了什么版本的Storable。解决与Stored :: nfreeze一起存储的数据结构的问题?

我第一次尝试使用最新的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` 

采用可收纳-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 

采用可收纳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.14之间运行差异以查看是否可以找出导致更改的原因。

任何人都可以给的指导?

谢谢!

+0

我怀疑32位/ 64位问题可能确实是相关的。尝试在32位版本的Perl上运行它,看看是否有帮助。 –

回答

1

2.7格式首次与Storable 2.14一起使用。

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

+0

谢谢!编译时如何配置perl的整数大小? – btucker

+0

'-Duse64bitint'为64,但不能强制32.可能还有其他不同之处。存储的数据并不是真的意味着在Perl构建之间共享。 – ikegami

+0

有没有什么办法从存储的数据中找出需要读取的perl配置? – btucker

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存储,因此存在问题。在这种情况下,错误信息是红色的鲱鱼,但至少你知道东西是错误的。