sub svhash { ($db, $hm, $makedb, $duplicates, $bdbtype) = @_; $makedb ||= 0; $duplicates ||= ''; $bdbtype ||= 'hash'; my %h; ($dbhandx, $fail) = ("", ""); $fail = _dbfix($db, $hm); unless ($fail) { my $bdb = BerkeleyDB::Hash; if (lc($bdbtype) =~ /btree/) { $bdb = BerkeleyDB::Btree;} my $fset = DB_CREATE; my $n = "0666"; my $dups = DB_DUP | DB_DUPSORT; $BerkeleyDB::Error = ''; if ($duplicates) { if ($makedb) { tie %h, $bdb, -Filename => $db, -Flags => $fset, -Mode => $n, -Property => $dups or $fail = 1; } else { tie %h, $bdb, -Filename => $db, -Mode => $n, -Property => $dups or $fail = 1; } } else { if ($makedb) { tie %h, $bdb, -Filename => $db, -Flags => $fset, -Mode => $n or $fail = 1; } else { tie %h, $bdb, -Filename => $db, -Mode => $n or $fail = 1; } } $fail = dbresult($fail, $BerkeleyDB::Error); unless ($fail) {$dbhandx = \%h;} } return ($dbhandx, $fail); }