X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/7b45bfb2a4f9bc0296d9126274010a11d1073e8d..f78fd11b71988ea91bda72f464df6cb7a1a45620:/client-libraries/perl/lib/Redis/Hash.pm?ds=inline diff --git a/client-libraries/perl/lib/Redis/Hash.pm b/client-libraries/perl/lib/Redis/Hash.pm new file mode 100644 index 00000000..e5f8f703 --- /dev/null +++ b/client-libraries/perl/lib/Redis/Hash.pm @@ -0,0 +1,70 @@ +package Redis::Hash; + +use strict; +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', 'prefix'; + +=cut + +# mandatory methods +sub TIEHASH { + my ($class,$name) = @_; + my $self = Redis->new; + $name .= ':' if $name; + $self->{name} = $name || ''; + bless $self => $class; +} + +sub STORE { + my ($self,$key,$value) = @_; + $self->set( $self->{name} . $key, $value ); +} + +sub FETCH { + my ($self,$key) = @_; + $self->get( $self->{name} . $key ); +} + +sub FIRSTKEY { + my $self = shift; + $self->{keys} = [ $self->keys( $self->{name} . '*' ) ]; + $self->NEXTKEY; +} + +sub NEXTKEY { + my $self = shift; + my $key = shift @{ $self->{keys} } || return; + my $name = $self->{name}; + $key =~ s{^$name}{} || warn "can't strip $name from $key"; + return $key; +} + +sub EXISTS { + my ($self,$key) = @_; + $self->exists( $self->{name} . $key ); +} + +sub DELETE { + my ($self,$key) = @_; + $self->del( $self->{name} . $key ); +} + +sub CLEAR { + my ($self) = @_; + $self->del( $_ ) foreach ( $self->keys( $self->{name} . '*' ) ); + $self->{keys} = []; +} + +1;