NAME

Build::Hopen::Scope - a hierarchical name table

SYNOPSIS

A Scope represents a set of data available to operations. It is a key-value store that falls back to an outer Scope if a requested key isn't found.

This particular Scope is a concrete implementation using a hash under the hood. However, the public API is limited to "outer", "add", and "find" (plus new from Class::Tiny). Subclasses may use different representations.

ATTRIBUTES

outer

The fallback Scope for looking up names not found in this Scope. If non is provided, it is undef, and no fallback will happen.

name

Not used, but provided so you can use "hnew" in Build::Hopen to make Scopes.

METHODS

find

Find a named data item in the environment and return it. Returns undef on failure. Usage: $instance-find($name)>. Dies if given a falsy name, notably, '0'.

add

Add key-value pairs to this instance. Returns the instance so you can chain. Example usage:

my $scope = Build::Hopen::Scope->new()->add(foo => 1);

add is responsible for handling any conflicts that may occur. In this particular implementation, the last-added value for a particular key wins.

names

Returns a list of the items available through this Scope, including all its parent Scopes (if any).

execute

Run a Build::Hopen::G::Runnable given a set of inputs. Fills in the inputs from the environment if possible. Usage:

$env->execute($runnable[, {inputs...})