Author image Felipe Gasper
and 1 contributors

NAME

CBOR::PP::Decode

SYNOPSIS

    my $perlvar = CBOR::PP::Decode::decode($binary);

DESCRIPTION

This implements a CBOR encoder in pure Perl.

MAPPING PERL TO CBOR

  • Scalars that look like unsigned integers are encoded as such. UTF-8 strings and strings that fit 7-bit ASCII (including floats and negatives) are encoded as text. Any other scalar is encoded as binary.

    Note that there is no “right way” to determine whether an arbitrary Perl (non-reference) scalar should be encoded as a string or as a number. The above seems a reasonable enough approach.

  • UTF8-flagged strings are encoded as text; others are encoded as binary. This is a “best-guess” merely; Perl’s UTF8 flag doesn’t reliably indicate whether a given string is a text or a byte string.

  • undef, Types::Serialiser::true(), and Types::Serialiser::false() are encoded as null, true, and false, respectively.

  • There is no support for streamed (i.e., indefinite-length) objects.

  • There is no Perl value that maps to CBOR’s undefined value.

TODO

  • Add canonicalization support.

  • Optimize as may be feasible.

AUTHOR

Gasper Software Consulting (FELIPE)

LICENSE

This code is licensed under the same license as Perl itself.

FUNCTIONS

$obj = tag( $NUMBER, $VALUE )

Returns an object that represents a value and its CBOR tag number. For example, to encode a date/time string, you could do:

    my $tagged = tag(0, '2013-03-21T20:04:00Z')

encode() recognizes objects that this function returns and turns them into tagged CBOR values.

METHODS

$cbor = encode( $VALUE, \%OPTS )

Returns a CBOR string that represents the passed $VALUE.

For now this is only called as a static method but may eventually be an instance method as well, for example, to define options like canonicalization.