class Cache::LRU { use Hash::Ordered; has $cache :handles(get) :builder; has $max_size :new(optional) :reader :isa(PositiveInt) = 20; has $created :reader = time; method _build_cache () { Hash::Ordered->new } method set ( $key, $value ) { if ( $cache->exists($key) ) { $cache->delete($key); } elsif ( $cache->keys > $max_size ) { $cache->shift; } $cache->set( $key, $value ); # new values in front } }