Data::Remember::Memory - a short-term memory brain plugin for Data::Remember


Data-Remember documentation Contained in the Data-Remember distribution.

Index


Code Index:

NAME

Top

Data::Remember::Memory - a short-term memory brain plugin for Data::Remember

SYNOPSIS

Top

  use Data::Remember 'Memory';

  remember something => 'what?';

DESCRIPTION

Top

This is a very simple brain for Data::Remember that just stores everything in Perl data structures in memory.

METHODS

Top

new

Takes no arguments or special parameters. Any parameters will be ignored.

remember QUE, FACT

Stores the given FACT in a Perl data structure under QUE.

recall QUE

Recalls the fact stored at QUE.

forget QUE

Forgets the fact stored at QUE.

SEE ALSO

Top

Data::Remember

AUTHOR

Top

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

Top


Data-Remember documentation Contained in the Data-Remember distribution.
use strict;
use warnings;

package Data::Remember::Memory;

our $VERSION = '0.000001';

sub new {
    my $class = shift;
    bless { brain => {} }, $class;
}

sub remember {
    my $self = shift;
    my $que  = shift;
    my $fact = shift;

    my $last_que = pop @$que;

    my $object = $self->{brain};
    for my $que_entry (@$que) {
        if (defined $object->{$que_entry}) {
            $object = $object->{$que_entry};
        }
        else {
            $object = $object->{$que_entry} = {};
        }
    }

    $object->{$last_que} = $fact;
}

sub recall {
    my $self = shift;
    my $que  = shift;

    my $object = $self->{brain};
    for my $que_entry (@$que) {
        if (defined $object->{$que_entry}) {
            $object = $object->{$que_entry};
        }
        else {
            return;
        }
    }

    return scalar $object;
}

sub forget {
    my $self = shift;
    my $que  = shift;

    my $last_que = pop @$que;

    my $object = $self->{brain};
    for my $que_entry (@$que) {
        if (defined $object->{$que_entry}) {
            $object = $object->{$que_entry};
        }
        else {
            return;
        }
    }

    delete $object->{$last_que};
}

1;