Cache-Memcached-Fast-Safe

 view release on metacpan or  search on metacpan

lib/Cache/Memcached/Fast/Safe.pm  view on Meta::CPAN

package Cache::Memcached::Fast::Safe;

use strict;
use warnings;
use Cache::Memcached::Fast 0.19;
use Digest::SHA qw/sha1_hex/;
use parent qw/Cache::Memcached::Fast/;
use POSIX::AtFork;
use Scalar::Util qw/weaken/;

our $VERSION = '0.06';
our $SANITIZE_METHOD = \&_sanitize_method;

{
    use bytes;
    my %escapes = map { chr($_) => sprintf('%%%02X', $_) } (0x00..0x20, 0x7f..0xff);
    sub _sanitize_method {
        my $key = shift;
        $key =~ s/([\x00-\x20\x7f-\xff])/$escapes{$1}/ge;

lib/Cache/Memcached/Fast/Safe.pm  view on Meta::CPAN

        }
        $key;
    }
}

sub new {
    my $class = shift;
    my %args = ref $_[0] ? %{$_[0]} : @_;
    my $mem = $class->SUPER::new(\%args);
    # fork safe
    weaken(my $mem_weaken = $mem);
    POSIX::AtFork->add_to_child(sub {
        eval { $mem_weaken->disconnect_all };
    });
    $mem;
}

for my $method ( qw/set cas add replace append prepend incr decr delete touch/ ) {
    no strict 'refs';
    my $super = 'SUPER::'.$method;
    *{$method} = sub {
        my $self = shift;
        my $key = shift;



( run in 0.932 second using v1.01-cache-2.11-cpan-65fba6d93b7 )