lrem
[perl-Redis.git] / lib / Redis.pm
index 1df21f4..31d7eb0 100644 (file)
@@ -77,7 +77,7 @@ sub _sock_result_bulk {
        _sock_read_bulk();
 }
 
-sub _sock_ok {
+sub __sock_ok {
        my $ok = <$sock>;
        confess dump($ok) unless $ok eq "+OK\r\n";
 }
@@ -93,15 +93,27 @@ sub _sock_send_ok {
        my $self = shift;
        warn "## _sock_send_ok ",dump( @_ );
        print $sock join(' ',@_) . "\r\n";
-       _sock_ok();
+       __sock_ok();
+}
+
+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";
 }
 
 sub _sock_send_bulk {
-       my ( $self, $command, $key, $value ) = @_;
-       print $sock "$command $key " . length($value) . "\r\n$value\r\n";
-       _sock_ok();
+       __sock_send_bulk_raw( @_ );
+       __sock_ok();
 }
 
+sub _sock_send_bulk_number {
+       __sock_send_bulk_raw( @_ );
+       my $v = _sock_result();
+       confess $v unless $v =~ m{^\-?\d+$};
+       return $v;
+}
 
 =head1 Connection Handling
 
@@ -315,6 +327,50 @@ sub lrange {
        return @list;
 }
 
+=head2 ltrim
+
+  my $ok = $r->ltrim( $key, $start, $end );
+
+=cut
+
+sub ltrim {
+       my ( $self, $key, $start, $end ) = @_;
+       $self->_sock_send_ok( 'LTRIM', $key, $start, $end );
+}
+
+=head2 lindex
+
+  $r->lindex( $key, $index );
+
+=cut
+
+sub lindex {
+       my ( $self, $key, $index ) = @_;
+       $self->_sock_result_bulk( 'LINDEX', $key, $index );
+}
+
+=head2 lset
+
+  $r->lset( $key, $index, $value );
+
+=cut
+
+sub lset {
+       my ( $self, $key, $index, $value ) = @_;
+       $self->_sock_send_bulk( 'LSET', $key, $index, $value );
+}
+
+=head2 lrem
+
+  $r->lrem( $key, $count, $value );
+
+=cut
+
+sub lrem {
+       my ( $self, $key, $count, $value ) = @_;
+       $self->_sock_send_bulk_number( 'LREM', $key, $count, $value );
+}
+
 =head1 AUTHOR
 
 Dobrica Pavlinusic, C<< <dpavlin at rot13.org> >>