--- lib/Redis/Hash.pm 2009/03/22 19:17:51 42 +++ lib/Redis/Hash.pm 2009/03/22 20:04:17 43 @@ -6,20 +6,23 @@ 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 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 CLEAR { my ($self) = @_; $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) ); + $self->{keys} = []; } 1;