3

我有一堆数据存储在 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.14 之间的差异,看看我是否能找出导致变化的原因。

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

谢谢!

4

2 回答 2

1

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

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

于 2012-12-25T17:30:34.807 回答
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 存储的,因此出现了问题。在这种情况下,错误消息是一条红鲱鱼,但至少您知道出了点问题。

于 2014-05-21T20:14:50.487 回答