【发布时间】:2023-03-22 12:01:01
【问题描述】:
我有一个使用哈希的脚本,其中包含四个字符串作为键,其值为哈希。这些散列还包含四个字符串作为键,它们的值也有散列。这种模式一直持续到 n-1 级,这是在运行时确定的。第 n 级散列包含整数(与通常的散列引用相反)值。
我为 Perl 安装了 BerkeleyDB 模块,因此我可以使用磁盘空间而不是 RAM 来存储此哈希。我假设我可以简单地将哈希绑定到数据库,它会工作,所以我在我的代码中添加了以下内容:
my %tags = () ;
my $file = "db_tags.db" ;
unlink $file;
tie %tags, "BerkeleyDB::Hash",
-Filename => $file,
-Flags => DB_CREATE
or die "Cannot open $file\n" ;
但是,我得到了错误:
在 getUniqSubTreeBDB.pl 第 31 行第 1 行使用“严格引用”时,不能使用字符串 ("HASH(0x1a69ad8)") 作为 HASH 引用。
为了测试,我创建了一个新脚本,其中的代码(上图)与文件的散列相关联。然后我添加了以下内容:
my $href = \%tags;
$tags{'C'} = {} ;
它运行良好。然后我补充说:
$tags{'C'}->{'G'} = {} ;
它会给出几乎相同的错误。我认为 BerkeleyDB 无法处理我正在创建的数据结构类型。也许它能够处理我的测试中的第一级(C-> {}),因为它只是一个常规键-> 缩放器?
无论如何,对我的假设的任何建议或肯定将不胜感激。
【问题讨论】:
标签: database perl hash berkeley-db