Berkeley DB中的Perl Complex数据结构

时间:2013-11-28 04:51:53

标签: perl

有人可以请点亮这里

这个脚本:

use strict;
use BerkeleyDB;
my $filename = "/tmp/test" ; 
unlink $filename ;
tie my %h, "BerkeleyDB::Hash", -Filename => $filename,-Flags    => DB_CREATE or die   
"Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
$h{id1}{11111}{red}{2222}{3333}=1;
$h{id1}{11111}{red}{2222}{223}=1;
print "$h{id1}{11111}{red}{2222}{3333}";
untie %h ;

删除警报:“不能使用字符串(”HASH(0x822e638)“)作为HASH引用,而在./ber2.pl第17行使用”strict refs“。

第17行是:$ h {id1} {11111} {red} {2222} {223} = 1;

这有什么问题?

如果我在没有Berkeley的情况下运行脚本它就像一个魅力,但我需要使用数据库,因为我有内存问题

请帮助

1 个答案:

答案 0 :(得分:6)

你不能这样做,BerkeleyDB绑定的哈希接口只能存储普通标量,而不能存储引用(所以没有复杂的数据结构)。您可以将序列化数据(例如来自Storable)存储在其中,或者具有多个哈希值,并使用其中一些将密钥存储到其他哈希值中(您必须自己完成所有工作才能访问它们) ,但是)。或者您可以使用完全不同的内容,例如DBM::DeepKiokuDB(具有BerkeleyDB后端)或DBIx::Class + SQLite

相关问题