読者です 読者をやめる 読者になる 読者になる

生の数字を入れた key を incr して decr すると後ろに半角スペースが入った謎の文字列で返ってくる

Perl Memcached
#!/usr/bin/perl

use strict;
use warnings;

use Cache::Memcached::Fast;
use Data::Dumper;

my $memd = new Cache::Memcached::Fast({
      servers => [ { address => 'localhost:11211', weight => 2.5 } ],
      namespace => 'oogatta:',
      connect_timeout => 0.2,
      io_timeout => 0.5,
      close_on_error => 1,
      compress_threshold => 100_000,
      compress_ratio => 0.9,
      compress_methods => [ \&IO::Compress::Gzip::gzip,
                            \&IO::Uncompress::Gunzip::gunzip ],
      max_failures => 3,
      failure_timeout => 2,
      ketama_points => 150,
      nowait => 1,
      hash_namespace => 1,
      serialize_methods => [ \&Storable::freeze, \&Storable::thaw ],
      utf8 => ($^V ge v5.8.1 ? 1 : 0),
      max_size => 512 * 1024,
  });

$memd->set('scalar', 5);
$memd->incr('scalar', 8);
$memd->decr('scalar', 4);
$memd->set('hashref', { 'test' => 5, 'test2' => '5'});

print "Content-type: text/plain\n\n";

print Dumper($memd->get('scalar'));
print Dumper($memd->get('hashref'));

1;

結果:

Content-type: text/plain

$VAR1 = '9 ';
$VAR1 = {
          'test' => 5,
          'test2' => '5'
        };

ギャー!!

$memd->set('scalar', 5);
$memd->incr('scalar', 100);
$memd->decr('scalar', 96);

だと

$VAR1 = '9  ';

になるので(後ろに半角スペース2つ)、どうやら桁が上がって下がるとその桁の分半角スペースが来るようだ。ワーオ。