【发布时间】:2016-08-12 07:39:46
【问题描述】:
我正在使用 Perl v5.22.1、Storable2.53_01 和 IO::Uncompress::Gunzip2.068。
我想使用 Perl 将 Storable 文件压缩到内存中,而不使用中间文件。
我有一个变量$zip_file = '/some/storable.gz' 指向这个压缩文件。
如果我直接将压缩文件压缩到文件中,则可以正常工作,并且 %root 已正确设置为 Storable 哈希。
gunzip($zip_file, '/home/myusername/Programming/unzipped');
my %root = %{retrieve('/home/myusername/Programming/unzipped')};
但是,如果我像这样压缩到内存中:
my $file;
gunzip($zip_file, \$file);
my %root = %{thaw($file)};
我得到了错误
Storable binary image v56.115 more recent than I am (v2.10)`
所以 Storable 的神奇数字已被扼杀:它永远不应该那么高。
但是,解压后的缓冲区中的字符串仍然是正确的;缓冲区以pst 开头,这是正确的Storable 标头。它似乎只是被破坏的整数等多字节变量。
这是否与字节顺序有关,例如写入文件以一种方式工作,而写入文件缓冲区则以另一种方式工作?如何在不破坏整数的情况下将其压缩到缓冲区?
【问题讨论】: