1
我使用的是DBM::Deep哈希对象,像这样的工作:DBM ::深不使用Perl散列引用
my $dbm = DBM::Deep->new(
file => "dbm.db",
locking => 1,
autoflush => 1,
type => "DBM::Deep->TYPE_HASH",
);
#code..
$dbm = $hash_reference;
但是,这是行不通的。 $ dbm在程序期间保存了正确的值,但在退出后,dbm.db为空,当我启动另一个试图使用dbm.db的程序时,它没有任何内容。但每当我复制这样的散列引用(这是一个两级深哈希):
for my $id (keys %$hash_reference) {
for(keys %{$hash_reference->{$id}}) {
$todo->{$id}->{$_} = $hash_reference->{$id}->{$_};
}
}
然后将复制所做的一切正确的价值观仍然会执行程序后在那里。 DBM作者似乎强调,尽管他的DBM :: Deep对象像常规哈希一样工作,但是有谁知道是否有更简单的方法来执行此操作?谢谢!
你的意思是我丢掉了DBM对象,因为在分配它之后它只是一个普通的perl哈希引用? – srchulo 2012-08-04 00:25:52
@srchulo A-yup。 – tchrist 2012-08-04 00:48:16
是的,替换绑定引用内的散列,而不是用纯引用替换绑定的引用。 – zostay 2012-08-04 02:31:22