Как я могу использовать 32-битный Perl для оттаивания чего-то замороженного с 64-битным Storable?

Я пытаюсь разморозить большой двоичный объект базы данных, который был заморожен с помощью Storable на 64-разрядной машине Solaris (рабочей). Когда я пытаюсь разморозить 32-разрядный ПК с Windows (для разработчиков), я получаю сообщение "Порядок байтов не совместим".

perl -v (on solaris)
This is perl, v5.8.8 built for i86pc-solaris-64

perl -v (on Windows)
This is perl, v5.10.1 built for MSWin32-x86-multi-thread

Точная ошибка:

(Unable to read: Byte order is not compatible at blib\lib\Storable.pm (autosplit into  blib\lib\auto\Storable\thaw.al) line 415, at ../handlers/Search/actions/SearchSendQueue.pm line 124 )

строка 124 SearchSendQueue.pm:

my $object = thaw( $item->{object} );

Кто-нибудь знает, как я могу разморозить этот объект на 32-битной машине?

Примечание. Объект действителен и работает на 64-разрядной рабочей машине. Я уже пробовал "$Storable::interwork_56_64bit = 1;" как предложено на других форумах.

2 ответа

Решение

Хранимая документация гласит:

Storable записывает заголовок файла, который содержит размеры различных типов языка C для компилятора C, который создал Storable (если запись не выполняется в сетевом порядке), и будет отказываться загружать файлы, записанные с помощью Storable, не в той же (или совместимой) архитектуре.

В том же разделе они предполагают, что основным использованием Storable является локальный метод и метод FAST персистентности. Тем не менее, вы можете использовать nstore хранить постоянную структуру в сетевом порядке байтов. В результате он будет читать и хранить медленнее, но работает на всех платформах.

Таким образом, предложение заключается в том, что вам придется использовать 64-битную машину для чтения и повторного хранения данных в сетевом порядке, используя nstore,

Я знаю, что документы указывают, что это возможно, но я никогда не мог заставить его работать, кроме как с помощью nfreeze/nstore* на 64-битной машине.

Другие вопросы по тегам