63 |
warn "## bulk len: ",dump($len); |
warn "## bulk len: ",dump($len); |
64 |
return undef if $len eq "nil\r\n"; |
return undef if $len eq "nil\r\n"; |
65 |
my $v; |
my $v; |
66 |
read($sock, $v, $len) || die $!; |
if ( $len > 0 ) { |
67 |
warn "## bulk v: ",dump($v); |
read($sock, $v, $len) || die $!; |
68 |
|
warn "## bulk v: ",dump($v); |
69 |
|
} |
70 |
my $crlf; |
my $crlf; |
71 |
read($sock, $crlf, 2); # skip cr/lf |
read($sock, $crlf, 2); # skip cr/lf |
72 |
return $v; |
return $v; |
81 |
|
|
82 |
sub __sock_ok { |
sub __sock_ok { |
83 |
my $ok = <$sock>; |
my $ok = <$sock>; |
84 |
|
return undef if $ok eq "nil\r\n"; |
85 |
confess dump($ok) unless $ok eq "+OK\r\n"; |
confess dump($ok) unless $ok eq "+OK\r\n"; |
86 |
} |
} |
87 |
|
|
103 |
my $self = shift; |
my $self = shift; |
104 |
warn "## _sock_send_bulk ",dump( @_ ); |
warn "## _sock_send_bulk ",dump( @_ ); |
105 |
my $value = pop; |
my $value = pop; |
106 |
print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n"; |
$value = '' unless defined $value; # FIXME errr? nil? |
107 |
|
print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n" |
108 |
} |
} |
109 |
|
|
110 |
sub _sock_send_bulk { |
sub _sock_send_bulk { |
383 |
|
|
384 |
sub lpop { |
sub lpop { |
385 |
my ( $self, $key ) = @_; |
my ( $self, $key ) = @_; |
386 |
$self->_sock_result_bulk( 'lpop', $key ); |
$self->_sock_result_bulk( 'LPOP', $key ); |
387 |
} |
} |
388 |
|
|
389 |
=head2 rpop |
=head2 rpop |
394 |
|
|
395 |
sub rpop { |
sub rpop { |
396 |
my ( $self, $key ) = @_; |
my ( $self, $key ) = @_; |
397 |
$self->_sock_result_bulk( 'rpop', $key ); |
$self->_sock_result_bulk( 'RPOP', $key ); |
398 |
|
} |
399 |
|
|
400 |
|
=head1 Commands operating on sets |
401 |
|
|
402 |
|
=head2 sadd |
403 |
|
|
404 |
|
$r->sadd( $key, $member ); |
405 |
|
|
406 |
|
=cut |
407 |
|
|
408 |
|
sub sadd { |
409 |
|
my ( $self, $key, $member ) = @_; |
410 |
|
$self->_sock_send_bulk_number( 'SADD', $key, $member ); |
411 |
|
} |
412 |
|
|
413 |
|
=head2 srem |
414 |
|
|
415 |
|
$r->srem( $key, $member ); |
416 |
|
|
417 |
|
=cut |
418 |
|
|
419 |
|
sub srem { |
420 |
|
my ( $self, $key, $member ) = @_; |
421 |
|
$self->_sock_send_bulk_number( 'SREM', $key, $member ); |
422 |
|
} |
423 |
|
|
424 |
|
=head2 scard |
425 |
|
|
426 |
|
my $elements = $r->scard( $key ); |
427 |
|
|
428 |
|
=cut |
429 |
|
|
430 |
|
sub scard { |
431 |
|
my ( $self, $key ) = @_; |
432 |
|
$self->_sock_send( 'SCARD', $key ); |
433 |
} |
} |
434 |
|
|
435 |
=head1 AUTHOR |
=head1 AUTHOR |