DNS-BL
view release on metacpan or search on metacpan
lib/DNS/BL/cmds/connect/db.pm view on Meta::CPAN
package DNS::BL::cmds::connect::db;
use DNS::BL;
use 5.006001;
use strict;
use warnings;
use Fcntl qw(:DEFAULT);
use MLDBM qw(DB_File Storable);
use vars qw/@ISA/;
@ISA = qw/DNS::BL::cmds/;
use Carp;
our $VERSION = '0.00_01';
$VERSION = eval $VERSION; # see L<perlmodstyle>
# Preloaded methods go here.
=pod
=head1 NAME
DNS::BL::cmds::connect::db - Implement the DB connect command for DNS::BL
=head1 SYNOPSIS
use DNS::BL::cmds::connect::db;
=head1 DESCRIPTION
This module implements the connection to a DB backend where C<DNS::BL>
data will be stored. On each call to this class' methods, a hash will
be C<tie()>d and then C<untie()>d. This guarantees that the underlying
DB structure will be unlocked and available for other commands that
may, for instance, replace or manipulate the hash "from under us".
The following methods are implemented by this module:
=over
=item C<-E<gt>execute()>
See L<DNS::BL::cmds> for information on this method's purpose.
The connect command follows a syntax such as
connect db <args> ...
Note that the 'connect' token must be removed by the calling class,
usually C<DNS::BL::cmds::connect>. B<args> are key - value pairs
specifying different parameters as described below. Unknown parameters
are reported as errors. The complete calling sequence is as
connect db file "filename" [mode bulk]
Where "filename" refers to the DB file where data is to be found. If
the file does not exist, it will be created (provided that permissions
allow).
If "mode bulk" is indicated, arrangements are made to tie() to the
database once. This makes the operation slightly faster, but increases
the chance of collision when concurrent access to the backing store is
performed.
This class will be C<use>d and then, its C<execute()> method invoked
following the same protocol outlined in L<DNS::BL>. Prior C<connect()>
information is to be removed by the calling class.
=cut
sub execute
{
my $bl = shift;
my $command = shift; # Expect "db"
my %args = @_;
my @known = qw/file mode/;
unless ($command eq 'db')
{
return wantarray ?
(&DNS::BL::DNSBL_ESYNTAX(),
"'" . __PACKAGE__ . "' invoked by connect type '$command'")
: &DNS::BL::DNSBL_ESYNTAX();
}
for my $k (keys %args)
{
unless (grep { $k eq $_ } @known)
{
return wantarray ? (&DNS::BL::DNSBL_ESYNTAX(),
"Unknown argument '$k' to 'connect db'")
: &DNS::BL::DNSBL_ESYNTAX();
}
( run in 1.828 second using v1.01-cache-2.11-cpan-98e64b0badf )