X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/7b45bfb2a4f9bc0296d9126274010a11d1073e8d..f78fd11b71988ea91bda72f464df6cb7a1a45620:/client-libraries/perl/lib/Redis/List.pm?ds=inline diff --git a/client-libraries/perl/lib/Redis/List.pm b/client-libraries/perl/lib/Redis/List.pm new file mode 100644 index 00000000..6bbc093c --- /dev/null +++ b/client-libraries/perl/lib/Redis/List.pm @@ -0,0 +1,85 @@ +package Redis::List; + +use strict; +use warnings; + +use base qw/Redis Tie::Array/; + +=head1 NAME + +Redis::List - tie perl arrays into Redis lists + +=head1 SYNOPSYS + + tie @a, 'Redis::List', 'name'; + +=cut + +# mandatory methods +sub TIEARRAY { + my ($class,$name) = @_; + my $self = $class->new; + $self->{name} = $name; + bless $self => $class; +} + +sub FETCH { + my ($self,$index) = @_; + $self->lindex( $self->{name}, $index ); +} + +sub FETCHSIZE { + my ($self) = @_; + $self->llen( $self->{name} ); +} + +sub STORE { + my ($self,$index,$value) = @_; + $self->lset( $self->{name}, $index, $value ); +} + +sub STORESIZE { + my ($self,$count) = @_; + $self->ltrim( $self->{name}, 0, $count ); +# if $count > $self->FETCHSIZE; +} + +sub CLEAR { + my ($self) = @_; + $self->del( $self->{name} ); +} + +sub PUSH { + my $self = shift; + $self->rpush( $self->{name}, $_ ) foreach @_; +} + +sub SHIFT { + my $self = shift; + $self->lpop( $self->{name} ); +} + +sub UNSHIFT { + my $self = shift; + $self->lpush( $self->{name}, $_ ) foreach @_; +} + +sub SPLICE { + my $self = shift; + my $offset = shift; + my $length = shift; + $self->lrange( $self->{name}, $offset, $length ); + # FIXME rest of @_ ? +} + +sub EXTEND { + my ($self,$count) = @_; + $self->rpush( $self->{name}, '' ) foreach ( $self->FETCHSIZE .. ( $count - 1 ) ); +} + +sub DESTROY { + my $self = shift; + $self->quit; +} + +1;