X-Git-Url: http://git.rot13.org/?p=perl-Redis.git;a=blobdiff_plain;f=lib%2FRedis%2FHash.pm;h=e5f8f703949edf74b54268dea8aa482f87a21994;hp=6dad3dc396268a4ef97adba706196b8f9909c04b;hb=d614f74a89501c756b5e6a240995c0aa0295573b;hpb=16b05e03b2a90f65f103553d934858d974ee808d diff --git a/lib/Redis/Hash.pm b/lib/Redis/Hash.pm index 6dad3dc..e5f8f70 100644 --- a/lib/Redis/Hash.pm +++ b/lib/Redis/Hash.pm @@ -6,20 +6,23 @@ use warnings; 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 - tie %$name, 'Redis::Hash', 'name'; + tie %name, 'Redis::Hash', 'prefix'; =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 +39,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 +64,7 @@ sub DELETE { sub CLEAR { my ($self) = @_; $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) ); + $self->{keys} = []; } 1;