2012-08-03 71 views
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对象像常规哈希一样工作,但是有谁知道是否有更简单的方法来执行此操作?谢谢!

回答

5

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

%$dbm = %$hash_reference; 
+0

你的意思是我丢掉了DBM对象,因为在分配它之后它只是一个普通的perl哈希引用? – srchulo 2012-08-04 00:25:52

+0

@srchulo A-yup。 – tchrist 2012-08-04 00:48:16

+0

是的,替换绑定引用内的散列,而不是用纯引用替换绑定的引用。 – zostay 2012-08-04 02:31:22