LINUX.ORG.RU

История изменений

Исправление necromant, (текущая версия) :

ваши данные отсырели на 2023 (4.2 detected).

Да раньше было так, но Perl стремительно(!) развивается и в Perl v5.38 уже есть классы. (см Corinna)

Youtube: Perl’s new object-oriented syntax is coming, but what’s next? - Curtis Poe - Keynote - TPRC 2023

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)

Youtube: Perl’s new object-oriented syntax is coming, but what’s next? - Curtis Poe - Keynote - TPRC 2023

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;
    }
}