NAME

Devel::hdb::App::EncodePerlData - Encode Perl values in a -friendly way

SYNOPSIS

use Devel::hdb::App::EncodePerlData qw(encode_perl_data);

my $val = encode_perl_data($some_data_structure);
$io->print( JSON::encode_json( $val ));

DESCRIPTION

This utility module is used to take an artitrarily nested data structure, and return a value that may be safely JSON-encoded.

Functions

encode_perl_data

Accepts a single value and returns a value that may be safely passed to JSON::encode_json(). encode_json() cannot handle Perl-specific data like blessed references or typeglobs. Non-reference scalar values like numbers and strings are returned unchanged. For all references, encode_perl_data() returns a hashref with these keys __reftype String indicating the type of reference, as returned by Scalar::Util::reftype() __refaddr Memory address of the reference, as returned by Scalar::Util::refaddr() __blessed Package this reference is blessed into, as reurned by Scalar::Util::blessed. __value Reference to the unblessed data.

If the reference was not blessed, then the __blessed key will not be present. __value is generally a copy of the underlying data. For example, if the input value is an hashref, then __value will also be a hashref containing the input value's kays and values. For typeblobs and glob refs, __value will be a hashref with the keys SCALAR, ARRAY, HASH, IO and CODE. For coderefs, __value will be the stringified reference, like "CODE=(0x12345678)". For v-strings and v-string refs, __value will by an arrayref containing the integers making up the v-string.

encode_perl_data() handles arbitrarily neste data strucures, meaning that values in the __values slot may also be encoded this way.

SEE ALSO

Devel::hdb

AUTHOR

Anthony Brummett <brummett@cpan.org>

COPYRIGHT

Copyright 2013, Anthony Brummett. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.