代码之家  ›  专栏  ›  技术社区  ›  uxnow

如何使用32位Perl解冻使用64位可存储的冻结内容?

  •  5
  • uxnow  · 技术社区  · 16 年前

    我正在尝试解冻一个在64位Solaris(生产)计算机上使用storable冻结的数据库blob。在32位Windows(开发)PC上解冻时,我收到“字节顺序不兼容错误”。

    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 )
    

    searchsendqueue.pm的第124行:

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

    有人知道如何在32位机器上解冻这个对象吗?

    注意:该对象有效,在64位生产计算机上工作。 我已经尝试过“$storable::interwork_56_64bit=1”,正如其他论坛上建议的那样。

    2 回复  |  直到 16 年前
        1
  •  8
  •   Axeman maxelost    16 年前

    Storable 文件上说:

    storable写入一个文件头,其中包含构建storable的C编译器的各种C语言类型的大小(不按网络顺序写入时),并拒绝加载由不在同一(或兼容)体系结构上的storable写入的文件。

    在同一部分中,他们建议基本上使用storable是本地的和 快的 持久性方法。但是,您可以使用 nstore 将持久化结构存储在 网络 字节顺序。结果是,它读取和存储速度较慢,但可以跨所有平台工作。

    因此,建议您必须使用64位机器以网络顺序读取和重新存储数据,使用 n存储 .

        2
  •  5
  •   ysth    16 年前

    我知道文档表明这是可能的,但我从未能让它工作过,除非在64位机器上使用nfreeze/nstore*。