The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


Class::DataStore - Generic OO data storage/retrieval


  my %values = ( one => 1, two => 2 );
  my $store = Class::DataStore->new( \%values );

  # using get/set methods
  $store->set( 'three', 3 );
  my $three = $store->get( 'three' );
  # using AUTOLOAD method
  $store->four( 4 );
  my $four = $store->four;
  my @four = $store->four; # returns a list

  my $exists = $store->exists( 'three' ); # $exists = 1
  my $data_hashref = $store->dump;


Class::DataStore implements a simple storage system for object data. This data can be accessed via get/set methods and AUTOLOAD. AUTOLOAD calls are not added to the symbol table, so using get/set will be faster. Using AUTOLOAD also means that you will not be able to store data with a key that is already used by a instance method, such as "get" or "exists".

This module was written originally as part of a website framework that was used for the Democratic National Committee website in 2004. Some of the implementations here, such as get() optionally returning a list if called in array context, reflect the way this module was originally used for building web applications.

Class::DataStore is most useful when subclassed. To preserve the AUTOLOAD functionality, be sure to add the following when setting up the subclass:

  use base 'Class::DataStore';
  *AUTOLOAD = \&Class::DataStore::AUTOLOAD;

This module is also a useful add-on for modules that need quick and simple data storage, e.g. to store configuration data:

  $self->{_config} = Class::Datastore->new( $config_data );
  sub config { return $_[0]->{_config}; }
  my $server = $self->config->server;
  my $sender = $self->config->get( 'sender' );


new( $data_hashref )

The $data_hashref is stored in $self->{_data}. Returns the blessed object.

exists( $key )

Returns 1 if the $key exists in the $self->{_data} hashref. Otherwise, returns 0.

get( $key )

Returns the value of $self->{_data}->{$key}, or undef.

If the value is stored as an ARRAYREF, HASHREF or a scalar, and wantarray is true, the return value will be a list. Otherwise, the value will be returned unaltered.

set( $key => $value )

Sets $self->{_data}->{$key} to $value, and returns $value. Values must be scalars, including, of course, references.


Returns the $self->{_data} as hashref or hash, depending on the call.


Deletes all the keys from $self->{_data}. Returns the number of keys deleted.


Tries to determine $key from the method call. Returns $self->{_data}->{$key}, or undef.


Eric Folley, <>


Copyright 2004-2005 by Eric Folley

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