Cache::Memcachedにぱっちった

一応6Aのリポジトリからcoしてきてそれにパッチした。
http://code.sixapart.com/svn/memcached/trunk/api/perl/
テスト超適当だけど、どうかなぁ。


$ svn diff
Index: lib/Cache/Memcached.pm
===================================================================
--- lib/Cache/Memcached.pm (revision 318)
+++ lib/Cache/Memcached.pm (working copy)
@@ -522,6 +522,18 @@
return $1;
}

+sub get_callback {
+ my Cache::Memcached $self = shift;
+ my ($key, $callback, $exptime) = @_;
+ my $data = $self->get($key);
+ return $data if defined $data;
+
+ $data = $callback->();
+ $self->set( $key => $data , $exptime ) if defined $data;
+
+ return $data;
+}
+
sub get {
my Cache::Memcached $self = $_[0];
my $key = $_[1];
$ cat t/callback.t
# -*-perl-*-

use strict;
use Test::More;
use Cache::Memcached;
use IO::Socket::INET;

my $testaddr = "127.0.0.1:11211";
my $msock = IO::Socket::INET->new(PeerAddr => $testaddr,
Timeout => 3);
if ($msock) {
plan tests => 9;
} else {
plan skip_all => "No memcached instance running at $testaddr\n";
exit 0;
}

my $memd = Cache::Memcached->new({
servers => [ $testaddr ],
namespace => "Cache::Memcached::t/$$/" . (time() % 100) . "/",
});

ok($memd->get_callback("key1",sub{'val1'}));
is($memd->get("key1"), "val1", "get worked");

$