=head2 Canned Filters
Immediate filters are useful for one-off situations. For more generic
problems it can be useful to package the filter up in its own module.
The usage is for a canned filter is:
$db->Filter_Push("name", params)
where
=over 5
=item "name"
is the name of the module to load. If the string specified does not
contain the package separator characters "::", it is assumed to refer to
the full module name "DBM_Filter::name". This means that the full names
for canned filters, "null" and "utf8", included with this module are:
DBM_Filter::null
DBM_Filter::utf8
=item params
any optional parameters that need to be sent to the filter. See the
encode filter for an example of a module that uses parameters.
=back
The module that implements the canned filter can take one of two
forms. Here is a template for the first
package DBM_Filter::null ;
use strict;
use warnings;
sub Store
{
# store code here
}
sub Fetch
{
# fetch code here
}
1;
Notes:
=over 5
=item 1.
The package name uses the C<DBM_Filter::> prefix.
=item 2.
The module I<must> have both a Store and a Fetch method. If only one is
present, or neither are present, a fatal error will be thrown.
=back
The second form allows the filter to hold state information using a
closure, thus:
package DBM_Filter::encoding ;
use strict;
use warnings;
sub Filter
{
my @params = @_ ;
...
return {
Store => sub { $_ = $encoding->encode($_) },
Fetch => sub { $_ = $encoding->decode($_) }
} ;
}
1;
In this instance the "Store" and "Fetch" methods are encapsulated inside a
"Filter" method.
=head1 Filters Included
A number of canned filers are provided with this module. They cover a
number of the main areas that filters are needed when interfacing with
DBM files. They also act as templates for your own filters.
The filter included are:
=5= |