We look at three modules, FreezeThaw,
Data::Dumper, and Storable, in this section. All of them serialize
Perl data structures to ASCII or binary strings; only Storable
actually writes them to disk. The other two modules are important
because they can be used in conjunction with other persistence
mechanisms such as databases and DBM files. All of them correctly
account for blessed object references and self-referential data
structures, but trip up when it comes to typeglobs, tied variables,
or scalars containing pointers to C data types (justifiably so). It
is also impossible for these (or any) modules to understand implicit
relationships. For example, if you use the ObjectTemplate approach
described in Section 8.1, the “object”
is basically an array index, and so the disk will get to see only a
bunch of meaningless array indices minus the data. Another subtle
error occurs when you use references as hash indices and Perl
converts them to strings (such as
SCALAR(0xe3f434)). This is not a real reference,
so if you store the hash table to a file and recreate it, the
implicit reference to the original structure is not valid any more.
Moral of the story: simple nests of Perl structures are handled easily; in all other cases, it is your responsibility to translate your application data into a structure containing ordinary Perl elements before sending it to disk.
FreezeThaw, written by Ilya Zakharevich, is a pure Perl module (no C extensions) and encodes complex ...