我有一些使用旧的 32 位 (i686) 版本的 Perl (5.8.6) 创建的 GDBM 文件,我想与 x86_64 Perl 5.28.0 一起使用,但它不起作用。这是我的测试代码:
use strict;
use warnings;
use GDBM_File;
my $dbmfile = "/path/to/gdbm_test_file";
my %DBM;
eval {
my $ok = tie(%DBM, 'GDBM_File', $dbmfile, &GDBM_WRCREAT, 0664);
die "Error: Bad status!\n" unless $ok;
};
die "Error: Could not open $dbmfile.\n" if $@;
foreach my $key (sort(keys(%DBM))) {
print "$key :: $DBM{$key}\n";
}
untie %DBM;
如果我使用较旧的 i686 Perl 运行此代码并$dbmfile
指向最近由同一 i686 Perl 创建的 GDBM 文件,它会正确读取 GDBM 文件并打印出其内容。
但是,如果我使用 x86_64 Perl 5.28.0 运行此代码,它就会默默地失败。没有错误。根本没有输出。
如果我使用 x86_64 Perl 5.10.1 运行此代码,则会eval
捕获“错误状态”错误,然后我得到Error: Could not open /path/to/gdbm_test_file.
如果我使用 x86_64 Perl 5.28.0 创建一个新的GDBM 文件并尝试使用旧的 i686 Perl 读取它,i686 Perl 就会死掉read error
。foreach
平台:CentOS 6.8
gdbm.i686 和 gdbm.x86_64 软件包均已安装且版本相同:1.8.0-39
有什么建议么?这不可能吗?