DBM :: Deep不使用perl哈希引用

时间:2012-08-03 22:03:16

标签: perl hash reference copy dbm

我正在使用DBM::Deep哈希对象,如下所示:

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对象就像常规哈希一样工作,所以有人知道是否有更简单的方法来做到这一点?谢谢!

1 个答案:

答案 0 :(得分:5)

你扔掉了这个物体。试试这个:

%$dbm = %$hash_reference;