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

Я пытаюсь разморозить большой двоичный объект базы данных, который был заморожен с помощью 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 ]

8 голосов
/ 07 января 2010

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

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

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

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

5 голосов
/ 07 января 2010

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

...