【问题标题】:DBM::Deep not working with perl hash referenceDBM::Deep 不使用 perl 哈希引用
【发布时间】:2012-08-03 22:03:16
【问题描述】:

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

【问题讨论】:

    标签: perl hash reference copy dbm


    【解决方案1】:

    你正在扔掉这个东西。试试这个:

    %$dbm = %$hash_reference;
    

    【讨论】:

    • 你的意思是我要丢弃 DBM 对象,因为在我分配它之后它只是一个常规的 perl 哈希引用?
    • 是的,替换绑定引用中的哈希,而不是用普通引用替换绑定引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多