X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2FRedis.pm;h=1ec303790d449391b8e4000425ce969dfaeddc2f;hb=5a01d65e3bd6c4b29fe90af463e06d484039c574;hp=31d7eb03696be340c356e76cc5613f0708a3367f;hpb=0530ee25184daf62214ddb3b281cb806aff7f9db;p=perl-Redis.git diff --git a/lib/Redis.pm b/lib/Redis.pm index 31d7eb0..1ec3037 100644 --- a/lib/Redis.pm +++ b/lib/Redis.pm @@ -63,8 +63,10 @@ sub _sock_read_bulk { warn "## bulk len: ",dump($len); return undef if $len eq "nil\r\n"; my $v; - read($sock, $v, $len) || die $!; - warn "## bulk v: ",dump($v); + if ( $len > 0 ) { + read($sock, $v, $len) || die $!; + warn "## bulk v: ",dump($v); + } my $crlf; read($sock, $crlf, 2); # skip cr/lf return $v; @@ -79,6 +81,7 @@ sub _sock_result_bulk { sub __sock_ok { my $ok = <$sock>; + return undef if $ok eq "nil\r\n"; confess dump($ok) unless $ok eq "+OK\r\n"; } @@ -100,7 +103,8 @@ sub __sock_send_bulk_raw { my $self = shift; warn "## _sock_send_bulk ",dump( @_ ); my $value = pop; - print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n"; + $value = '' unless defined $value; # FIXME errr? nil? + print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n" } sub _sock_send_bulk { @@ -362,7 +366,7 @@ sub lset { =head2 lrem - $r->lrem( $key, $count, $value ); + my $modified_count = $r->lrem( $key, $count, $value ); =cut @@ -371,6 +375,63 @@ sub lrem { $self->_sock_send_bulk_number( 'LREM', $key, $count, $value ); } +=head2 lpop + + my $value = $r->lpop( $key ); + +=cut + +sub lpop { + my ( $self, $key ) = @_; + $self->_sock_result_bulk( 'LPOP', $key ); +} + +=head2 rpop + + my $value = $r->rpop( $key ); + +=cut + +sub rpop { + my ( $self, $key ) = @_; + $self->_sock_result_bulk( 'RPOP', $key ); +} + +=head1 Commands operating on sets + +=head2 sadd + + $r->sadd( $key, $member ); + +=cut + +sub sadd { + my ( $self, $key, $member ) = @_; + $self->_sock_send_bulk_number( 'SADD', $key, $member ); +} + +=head2 srem + + $r->srem( $key, $member ); + +=cut + +sub srem { + my ( $self, $key, $member ) = @_; + $self->_sock_send_bulk_number( 'SREM', $key, $member ); +} + +=head2 scard + + my $elements = $r->scard( $key ); + +=cut + +sub scard { + my ( $self, $key ) = @_; + $self->_sock_send( 'SCARD', $key ); +} + =head1 AUTHOR Dobrica Pavlinusic, C<< >>