--- lib/Redis.pm 2009/09/14 11:37:25 63 +++ lib/Redis.pm 2010/03/19 14:38:13 71 @@ -6,6 +6,7 @@ use IO::Socket::INET; use Data::Dumper; use Carp qw/confess/; +use Encode; =head1 NAME @@ -13,14 +14,14 @@ =cut -our $VERSION = '0.0801'; +our $VERSION = '1.2001'; =head1 DESCRIPTION Pure perl bindings for L -This version support git version 0.08 or later of Redis available at +This version supports protocol 1.2 or later of Redis available at L @@ -61,6 +62,13 @@ sadd => 1, srem => 1, sismember => 1, echo => 1, + getset => 1, + smove => 1, + zadd => 1, + zrem => 1, + zscore => 1, + zincrby => 1, + append => 1, }; # we don't want DESTROY to fallback into AUTOLOAD @@ -70,6 +78,8 @@ sub AUTOLOAD { my $self = shift; + use bytes; + my $sock = $self->{sock} || die "no server connected"; my $command = $AUTOLOAD; @@ -108,6 +118,7 @@ } my $result = <$sock> || die "can't read socket: $!"; + Encode::_utf8_on($result); warn "<< $result" if $self->{debug}; my $type = substr($result,0,1); $result = substr($result,1,-2); @@ -126,7 +137,7 @@ } if ( $type eq '-' ) { - confess $result; + confess "[$command] $result"; } elsif ( $type eq '+' ) { return $result; } elsif ( $type eq '$' ) { @@ -147,6 +158,7 @@ my $v; if ( $len > 0 ) { read($self->{sock}, $v, $len) || die $!; + Encode::_utf8_on($v); warn "<< ",Dumper($v),$/ if $self->{debug}; } my $crlf; @@ -360,6 +372,14 @@ my $info_hash = $r->info; +=head1 ENCODING + +Since Redis knows nothing about encoding, we are forcing utf-8 flag on all data received from Redis. +This change is introduced in 1.2001 version. + +This allows us to round-trip utf-8 encoded characters correctly, but might be problem if you push +binary junk into Redis and expect to get it back without utf-8 flag turned on. + =head1 AUTHOR Dobrica Pavlinusic, C<< >> @@ -410,7 +430,7 @@ =head1 COPYRIGHT & LICENSE -Copyright 2009 Dobrica Pavlinusic, all rights reserved. +Copyright 2009-2010 Dobrica Pavlinusic, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.