Dir::Manifest - treat a directory and a manifest file as a hash/dictionary of keys to texts or blobs


version 0.6.1


    use Dir::Manifest ();

    my $obj = Dir::Manifest->new(
            manifest_fn => "./t/data/texts/list.txt",
            dir         => "./t/data/texts/texts",

    # Or alternatively:
    my $obj = Dir::Manifest->dwim_new(
            base => "./t/data/texts",

    # TEST
    is (
        scalar(`my-process ...`),
        $obj->text("my-process-output1", {lf => 1,}),
        "Good output of my-process.",


Here is the primary use case: you have several long texts (and/or binary blobs) that you wish to load from the code (e.g: for the "want"/expected values of tests) and you wish to conventiently edit them, track them and maintain them. Using Dir::Manifest you can put each in a separate file in a directory, create a manifest file listing all valid filenames/key and then say something like my $text = $dir->text("deal24solution.txt", {lf => 1}). And hopefully it will be done securely and reliably.


my $obj = Dir::Manifest->new({manifest_fn => "/path/to/base-dir/list.txr", dir => "/path/to/base-dir/texts",});

Constructs a new Dir::Manifest object from separate manifest_fn and a directory holding the texts.

my $obj = Dir::Manifest->dwim_new({base => "/path/to/base-dir"});

Constructs a new Dir::Manifest with manifest_fn being $base->child("list.txt") and dir being $base->child("texts"). ("Convention over configuration".)

Added in version 0.6.0.


The path to the manifest file.


The path to the directory containing the texts and blobs as files.


Returns a sorted array reference containing the available keys as strings.


Returns the Dir::Manifest::Key object associated with the string $key. Throws an error if $key was not given in the manifest.


Returns the Path::Tiny objects for the key, which is usable as a path in string context. Equivalent to $self->get_obj($key)->fh().

(Added in version 0.2.0. ).

my $contents = $self->text("$key", {%OPTS})

Slurps the key using Dir::Manifest::Slurp

my $hash_ref = $obj->texts_dictionary( {slurp_opts => {},} );

Returns a hash reference (a dictionary) containing all keys and their slurped contents as values. 'slurp_opts' is passed to text().

$obj->add_key( {key => "new_key", utf8_val => $utf8_text, } );

Adds a new key with a file with the new UTF-8 contents encoded as $utf8_text . (Added in version 0.4.0).

$obj->remove_key( {key => "existing_key_id", } );

Removes the key from the dictionary while deleting its associated file. (Added in version 0.4.0).


This code is dedicated to the memory of Jonathan Scott Duff a.k.a PerlJam and perlpilot who passed away some days before the first release of this code. For more about him, see:


kristian vuljar used to have a jamendo track called "Keys" based on Shine 4U by Carmen and Camille. You can find it at .



The following websites have more information about this module, and may be of help to you. As always, in addition to those websites please use your favorite search engine to discover more resources.

Bugs / Feature Requests

Please report any bugs or feature requests by email to bug-dir-manifest at, or through the web interface at You will be automatically notified of any progress on the request by the system.

Source Code

The code is open to the world, and available for you to hack on. Please feel free to browse it and play with it, or whatever. If you want to contribute patches, please send me a diff or prod me to pull from your repository :)

  git clone


Shlomi Fish <>


Please report any bugs or feature requests on the bugtracker website

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.


This software is Copyright (c) 2019 by Shlomi Fish.

This is free software, licensed under:

  The MIT (X11) License