人
有人可以请点亮这里
这个脚本:
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的情况下运行脚本它就像一个魅力,但我需要使用数据库,因为我有内存问题
请帮助
答案 0 :(得分:6)
你不能这样做,BerkeleyDB
绑定的哈希接口只能存储普通标量,而不能存储引用(所以没有复杂的数据结构)。您可以将序列化数据(例如来自Storable
)存储在其中,或者具有多个哈希值,并使用其中一些将密钥存储到其他哈希值中(您必须自己完成所有工作才能访问它们) ,但是)。或者您可以使用完全不同的内容,例如DBM::Deep,KiokuDB(具有BerkeleyDB后端)或DBIx::Class + SQLite。