use Data::Dumper instead of Data::Dump so all our dependencies are perl core modules
[perl-Redis.git] / lib / Redis / Hash.pm
index 6dad3dc..c56a22f 100644 (file)
@@ -12,14 +12,18 @@ Redis::Hash - tie perl hashes into Redis
 
 =head1 SYNOPSYS
 
-  tie %$name, 'Redis::Hash', 'name';
+  tie %name, 'Redis::Hash', 'prefix';
+
+  my $o = tie %foobar, 'Redis::Hash', 'foobar';
+  print $o->info->{used_memory}; # or any redis command
 
 =cut
 
 # mandatory methods
 sub TIEHASH {
        my ($class,$name) = @_;
-       my $self = $class->new;
+       my $self = Redis->new;
+       $name .= ':' if $name;
        $self->{name} = $name || '';
        bless $self => $class;
 }
@@ -36,13 +40,16 @@ sub FETCH {
 
 sub FIRSTKEY {
        my $self = shift;
-       $self->{keys} = [ $self->keys( $self->{name} . '*') ];
-       unshift @{ $self->{keys} };
+       $self->{keys} = [ $self->keys( $self->{name} . '*' ) ];
+       $self->NEXTKEY;
 } 
 
 sub NEXTKEY {
        my $self = shift;
-       unshift @{ $self->{keys} };
+       my $key = shift @{ $self->{keys} } || return;
+       my $name = $self->{name};
+       $key =~ s{^$name}{} || warn "can't strip $name from $key";
+       return $key;
 }
 
 sub EXISTS {
@@ -58,6 +65,7 @@ sub DELETE {
 sub CLEAR {
        my ($self) = @_;
        $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) );
+       $self->{keys} = [];
 }
 
 1;