note
macnod
<p>I ran into the following problem: in our database, we have some frozen Perl hashes that were created with an old 32-bit version of Storable. While moving our application to a newer version of Linux and Perl and Storable, we discovered that the newer version of Storable, 64-bit, couldn't thaw the old frozen hashes.</p>
<p>I developed the following Perl solution, which works for the data that we have. The code can take something that an old, 32-bit Storable freeze created and convert it into something that a new, 64-bit Storable can thaw.</p>
<code>
sub fix_frozen {
my $frozen= shift;
my $new= join(
'',
(qw/04 08 08 31 32 33 34 35 36 37 38 04 08 08 08/,
(map {sprintf("%02x", ord($_))}
(split //, substr($frozen, 11)))));
$fixed_frozen=~ s/0{7}b/0{15}b/sg;
join('', map {chr hex $_} ($fixed_frozen =~ /[0-9a-z]{2}/gi));
}
</code>
<p>Keep in mind that this code will not work for all cases and that I've only ever tested it with the data that we have.</p>
295788
295844