=over 5
=item * utf8
This module will ensure that all data written to the DBM will be encoded
in UTF-8.
This module needs the Encode module.
=item * encode
Allows you to choose the character encoding will be store in the DBM file.
=item * compress
This filter will compress all data before it is written to the database
and uncompressed it on reading.
This module needs Compress::Zlib.
=item * int32
This module is used when interoperating with a C/C++ application that
uses a C int as either the key and/or value in the DBM file.
=item * null
This module ensures that all data written to the DBM file is null
terminated. This is useful when you have a perl script that needs
to interoperate with a DBM file that a C program also uses. A fairly
common issue is for the C application to include the terminating null
in a string when it writes to the DBM file. This filter will ensure that
all data written to the DBM file can be read by the C application.
=back
=head1 NOTES
=head2 Maintain Round Trip Integrity
When writing a DBM filter it is I<very> important to ensure that it is
possible to retrieve all data that you have written when the DBM filter
is in place. In practice, this means that whatever transformation is
applied to the data in the Store method, the I<exact> inverse operation
should be applied in the Fetch method.
If you don't provide an exact inverse transformation, you will find that
code like this will not behave as you expect.
while (my ($k, $v) = each %hash)
{
...
}
Depending on the transformation, you will find that one or more of the
following will happen
=over 5
=item 1
The loop will never terminate.
=item 2
Too few records will be retrieved.
=item 3
Too many will be retrieved.
=item 4
The loop will do the right thing for a while, but it will unexpectedly fail.
=back
=head2 Don't mix filtered & non-filtered data in the same database file.
This is just a restatement of the previous section. Unless you are
completely certain you know what you are doing, avoid mixing filtered &
non-filtered data.
=head1 EXAMPLE
Say you need to interoperate with a legacy C application that stores
keys as C ints and the values and null terminated UTF-8 strings. Here
is how you would set that up
my $db = tie %hash, 'SDBM_File', ...
$db->Filter_Key_Push('int32') ;
$db->Filter_Value_Push('utf8');
$db->Filter_Value_Push('null');
=head1 SEE ALSO
<DB_File>, L<GDBM_File>, L<NDBM_File>, L<ODBM_File>, L<SDBM_File>, L<perldbmfilter>
=6= |