This function returns the deserialization of data passed as argument by
calling one or more of the following functions. Each of those functions
deserializes a specific data type according to the syntax (see below). An
exception is thrown if the data type cannot be recognized.
Basically, the deserialization works as follows: While scalars and undefs
are easily deserialized upon recognition, its a bit more tricky with arrays
and hashes. Since they can possibly contain more (complex) data, each of the
functions below returns two values: $data holds the deserialized data, and
$returnmessage returns the (serialized) string that was used to deserialize
the data. The latter value is important to keep track of which part of the
serialized string has already been deserialized.
We support scalars, array references and hash references
in any combination. The syntax is the following one:
scalar ::= SCALAR.SEPARATOR.
[0-9]+.SEPARATOR. /* length of data */
array ::= ARRAY.SEPARATOR.
[0-9]+.SEPARATOR. /* length of array data */
array_element ::= [0-9]+.SEPARATOR. /* position in the array */
hash ::= HASH.SEPARATOR.
[0-9]+.SEPARATOR. /* length of hash data */
hash_element ::= [1-9][0-9]*.SEPARATOR. /* length of the hash key */
[a-zA-Z0-9_]+.SEPARATOR. /* the hash key */
undef ::= UNDEF.SEPARATOR.
The SEPARATOR is one character long. It can be any non number.
The default separator is newline. The important thing is
that you can parse every structure without knowing the used
Perhaps the good mathmatics notice that the last SEPARATOR
in the definition of a scalar is not necessary. This SEPARATOR
is only used to make the resulting structure better readable