sub _open_db { my $self = shift; warn "_open_db $self $self->{NAME}\n"; # sorted index $DB_BTREE->{'flags'} = 0; $DB_BTREE->{'compare'} = sub { my ($key1, $key2) = @_; $key1 <=> $key2; }; if (tie(my %ip_db, 'DB_File', $self->{IP_FILE}, O_RDWR|O_CREAT, 0644, $DB_BTREE)) { # Enable duplicate keys as well $DB_BTREE->{'flags'} = R_DUP; if (my $stamp_tie = tie(my %stamp_db, 'DB_File', $self->{STAMP_FILE}, O_RDWR|O_CREAT, 0644, $DB_BTREE)) { $self->{IP_DB} = \%ip_db; $self->{STAMP_DB} = \%stamp_db; $self->{STAMP_TIE} = $stamp_tie; warn "_open_db OK IP_DB: $self->{IP_DB}" . " STAMP_DB: $self->{STAMP_DB} STAMP_TIE: $self->{STAMP_TIE}\n"; return $self; } else { $Err_Msg = "Can't open stamp db $self->{STAMP_FILE}: $!"; } warn "_open_db failed $Err_Msg\n"; untie %ip_db; warn "_open_db untie complete\n"; } else { $Err_Msg = "Can't open IP db $self->{IP_FILE}: $!" } warn "_open_db failed $Err_Msg\n"; return 0; } sub close_db { my $self = shift; warn "close_db $self\n"; delete $self->{STAMP_TIE}; warn "delete STAMP_TIE complete\n"; untie %{$self->{STAMP_DB}}; warn "untie STAMP_DB complete\n"; delete $self->{STAMP_DB}; warn "delete STAMP_DB complete\n"; untie %{$self->{IP_DB}}; warn "untie IP_DB complete\n"; delete $self->{IP_DB}; warn "delete IP_DB complete\n"; return 1; }