(RT #40782) '0' as a hashkey wasn't iterated over correctly.
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Hash.pm
index e1d09d3..f09f674 100644 (file)
@@ -4,6 +4,7 @@ use 5.006_000;
 
 use strict;
 use warnings FATAL => 'all';
+no warnings 'recursion';
 
 use base 'DBM::Deep';
 
@@ -72,13 +73,11 @@ sub FIRSTKEY {
     ##
     my $self = shift->_get_self;
 
-    warn "HASH:FIRSTKEY($self)\n" if DBM::Deep::DEBUG;
-
     $self->lock_shared;
     
     my $result = $self->_engine->get_next_key( $self );
     
-    $self->unlock();
+    $self->unlock;
     
     return ($result && $self->_engine->storage->{filter_fetch_key})
         ? $self->_engine->storage->{filter_fetch_key}->($result)
@@ -95,14 +94,12 @@ sub NEXTKEY {
         ? $self->_engine->storage->{filter_store_key}->($_[0])
         : $_[0];
 
-    warn "HASH:NEXTKEY($self,$prev_key)\n" if DBM::Deep::DEBUG;
-
     $self->lock_shared;
     
     my $result = $self->_engine->get_next_key( $self, $prev_key );
     
-    $self->unlock();
-
+    $self->unlock;
+    
     return ($result && $self->_engine->storage->{filter_fetch_key})
         ? $self->_engine->storage->{filter_fetch_key}->($result)
         : $result;
@@ -119,7 +116,7 @@ sub _copy_node {
     my ($db_temp) = @_;
 
     my $key = $self->first_key();
-    while ($key) {
+    while (defined $key) {
         my $value = $self->get($key);
         $self->_copy_value( \$db_temp->{$key}, $value );
         $key = $self->next_key($key);