DocSet::Cache - Maintain a Non-Volatile Cache of DocSet's Data


  use DocSet::Cache ();

  my $cache = DocSet::Cache->new($cache_path, 1);

  # $cache->read; # read by new() already

  # add a cache item to the ordered list

  # set/unset cached item's attributes
  $cache->set($id, $attr, $data);
  $cache->unset($id, $attr)

  # get cached item's attributes
  my $data = $cache->get($id, $attr);
  print "$id is cached" if $cache->is_cached($id);

  # invalidate cache (deletes all items)

  my $seq = $cache->id2seq($id);
  my $id = $cache->seq2id($seq);
  my @ids = $cache->ordered_ids;
  my $total_ids = $cache->total_ids;

      id       => $id,
      stitle   => $stitle,
      title    => $title,
      abstract => $abstract,
  my %index_node = $cache->index_node();

  $cache->parent_node($cache_path, $id, $rel_path);
  my ($cache_path, $id, $rel_path) = $cache->parent_node();


DocSet::Cache maintains a non-volatile cache of docset's data.

The cache is initialized either from the freezed file at the provided path. When the file is empty or doesn't exists, a new cache is initialized. When the cache is modified it should be saved, but if for some reason it doesn't get saved, the DESTROY method will check whether the cache wasn't synced to the disk yet and will perform the sync itself.

Each docset's node can create an entry in the cache, and store its data in it. The creator has to ensure that it supplies a unique id for each node that is added. Cache's internal representation is a hash, with internal data keys starting with _ (underscore), therefore the only restriction on node's id value is that it shouldn't not start with underscore.


META: to be written (see SYNOPSIS meanwhile)


Stas Bekman <stas (at)>