fixed Redis::Hash keys problem,
[perl-Redis.git] / lib / Redis / Hash.pm
index 6dad3dc..e5f8f70 100644 (file)
@@ -6,20 +6,23 @@ use warnings;
 use Tie::Hash;
 use base qw/Redis Tie::StdHash/;
 
 use Tie::Hash;
 use base qw/Redis Tie::StdHash/;
 
+use Data::Dump qw/dump/;
+
 =head1 NAME
 
 Redis::Hash - tie perl hashes into Redis
 
 =head1 SYNOPSYS
 
 =head1 NAME
 
 Redis::Hash - tie perl hashes into Redis
 
 =head1 SYNOPSYS
 
-  tie %$name, 'Redis::Hash', 'name';
+  tie %name, 'Redis::Hash', 'prefix';
 
 =cut
 
 # mandatory methods
 sub TIEHASH {
        my ($class,$name) = @_;
 
 =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;
 }
        $self->{name} = $name || '';
        bless $self => $class;
 }
@@ -36,13 +39,16 @@ sub FETCH {
 
 sub FIRSTKEY {
        my $self = shift;
 
 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;
 } 
 
 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 {
 }
 
 sub EXISTS {
@@ -58,6 +64,7 @@ sub DELETE {
 sub CLEAR {
        my ($self) = @_;
        $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) );
 sub CLEAR {
        my ($self) = @_;
        $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) );
+       $self->{keys} = [];
 }
 
 1;
 }
 
 1;