NAME

BusyBird::SafeData - a wrapper of a complex data structure to access its internals safely

SYNOPSIS

use BusyBird::SafeData qw(safed);

my $data = {
    foo => {
        bar => [
            0, 1, 2
        ],
        buzz => { hoge => 100 }
    }
};

my $sd = safed($data);

$sd->original; ## => $data

$sd->val("foo", "bar", 1);              ## => 1
$sd->val("foo", "buzz", "FOO");         ## => undef
$sd->val("foo", "quux", "hoge");        ## => undef (and no autovivification)
$sd->val("foo", "bar", "FOO");          ## => undef (and no exception thrown)
$sd->val("foo", "buzz", "hoge", "FOO"); ## => undef (and no exception thrown)

$sd->array("foo", "bar");    ## => (0, 1, 2)
$sd->array("foo", "buzz");   ## => ()
$sd->array("foo", "bar", 1); ## => ()

DESCRIPTION

BusyBird::SafeData is a wrapper around a complex data structure to provide a safe way to access its internal data.

EXPORTABLE FUNCTIONS

The following function is exported only by request.

$sd = safed($data)

Same as BusyBird::SafeData->new($data).

CLASS METHODS

$sd = BusyBird::SafeData->new($data)

The constructor.

$data is any scalar. $sd wraps the given $data.

OBJECT METHODS

$data = $sd->original()

Returns the original $data that $sd wraps.

$val = $sd->val(@path)

Return the value specified by @path from $sd.

@path is a list of indices/keys from the root of the $sd down to the value you want. If it cannot traverse @path completely, it returns undef.

This method never autovivifies anything in $sd.

@vals = $sd->array(@path)

Return the list of values in the array-ref specified by @path. If it cannot traverse @path completely, it returns an empty list. If the value at the @path is not an array-ref, it returns an empty list.

AUTHOR

Toshio Ito <toshioito [at] cpan.org>