История изменений
Исправление necromant, (текущая версия) :
ваши данные отсырели на 2023 (4.2 detected).
Да раньше было так, но Perl стремительно(!) развивается и в Perl v5.38 уже есть классы. (см Corinna)
class Cache::LRU v0.1.0 {
use Hash::Ordered;
use Carp 'croak';
field $num_caches :common = 0;
field $cache :handles(exists delete) = Hash::Ordered->new;
field $max_size :param :reader = 20;
field $created :reader = time;
ADJUST { # called after new()
$num_caches++;
if ( $max_size < 1 ) {
croak(...);
}
}
DESTRUCT { $num_caches-- }
method num_caches :common () { $num_caches }
method set( $key, $value ) {
$cache->unshift( $key, $value ); # new values in front
if ( $cache->keys > $max_size ) {
$cache->pop;
}
}
method get($key) {
return unless $cache->exists($key);
my $value = $cache->get($key);
$self->unshift( $key, $value ); # put it at the front
return $value;
}
}
Исходная версия necromant, :
ваши данные отсырели на 2023 (4.2 detected).
Да раньше было так, но Perl стремительно(!) развивается и в Perl v5.38 уже есть классы. (см Corinna)
class Cache::LRU v0.1.0 {
use Hash::Ordered;
use Carp 'croak';
field $num_caches :common = 0;
field $cache :handles(exists delete) = Hash::Ordered->new;
field $max_size :param :reader = 20;
field $created :reader = time;
ADJUST { # called after new()
$num_caches++;
if ( $max_size < 1 ) {
croak(...);
}
}
DESTRUCT { $num_caches-- }
method num_caches :common () { $num_caches }
method set( $key, $value ) {
$cache->unshift( $key, $value ); # new values in front
if ( $cache->keys > $max_size ) {
$cache->pop;
}
}
method get($key) {
return unless $cache->exists($key);
my $value = $cache->get($key);
$self->unshift( $key, $value ); # put it at the front
return $value;
}
}