The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Cache::Scalar::WithExpiry - Cache one scalar value with expiry

SYNOPSIS

    use Cache::Scalar::WithExpiry;
    use feature qw/state/;
    
    state $cache = Cache::Scalar::WithExpiry->new();
    my ($value, $expiry_epoch) = $cache->get_or_set(sub {
        my $val          = Storage->get;
        my $expiry_epoch = time + 20;
        return ($val, $expiry_epoch); # cache in 20 seconds
    });

DSL interface

    use Cache::Scalar::WithExpiry;
    
    my ($value, $expiry_epoch) = cache_with_expiry {
        my $val          = Storage->get;
        my $expiry_epoch = time + 20;
        return ($val, $expiry_epoch); # cache in 20 seconds
    };

DESCRIPTION

Cache::Scalar::WithExpiry is cache storage for one scalar value with expiry epoch.

METHODS

my $obj = Cache::Scalar::WithExpiry->new()

Create a new instance.

my $stuff, [$expiry_epoch:Num] = $obj->get();

Get a stuff from cache storage. It returns value in scalar context, and returns value and expiry epoch in array context.

$obj->set($val, $expiry_epoch)

Set a stuff for cache. $expiry_epoch is required.

$obj->get_or_set($code)

Get a cache value if it's already cached. If it's not cached, run $code which should return two value, $value_to_be_cached and $expiry_epoch, and cache the value until the expiry epoch.

$obj->delete($key)

Delete the cache.

EXPORT FUNCTION

my $stuff, [$expiry_epoch:Num] = cache_with_expiry {BLOCK};

[EXPERIMENTAL] It is equivalent process with doing new and set_or_get at a time.

THANKS TO

tokuhirom. Most code of this module is steal from his Cache::Memory::Simple::Scalar.

LICENSE

Copyright (C) Songmu.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Songmu <y.songmu@gmail.com>