You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.7 KiB
Perl

#!/usr/bin/perl
use Fcntl qw(/^O_/);
(my $Me = $0) =~ s-.*/--;
# XXX This should read your config file and default to the database type
# you specified there. The library should be extended to support this.
my $module = my $def_module = 'AnyDBM_File';
if (@ARGV && $ARGV[0] =~ s/^-m//) {
$module = shift;
if ($module eq '') {
@ARGV or die "$Me: no arg for -m specified\n";
$module = shift;
}
}
if (@ARGV != 2 || (grep /^-/, @ARGV)) {
print "\n";
print " usage: $Me [-m <dbm module>] <sourcefile> <dbmname>\n";
print "\n";
print " adds elements in <sourcefile> to dbm <dbmname>\n";
print "\n";
print " <sourcefile> is a text file of one-per-line\n";
print " <key> => <value>\n";
print " pairs, \n";
print "\n";
print " <dbmname> the the basename of the dbm db\n";
print " (e.g. 'infobot-is')\n";
print "\n";
print " <dbm module> is an alternate for $def_module,\n";
print " eg DB_File\n";
print "\n";
exit(1);
}
eval "require $module"; die if $@;
$sourcefile = $ARGV[0];
$dbname = $ARGV[1];
open(IN, $sourcefile)
|| die "can\'t open $sourcefile as source\n";
tie(%db, $module, $dbname, O_RDWR | O_CREAT, 0666)
|| die "Couldn't open \"$dbname\" with $module: $!";
$| = 1;
while (<IN>) {
chomp;
next if /^\s*$/;
if (!/=>/) {
print "skipping: $_";
next;
}
my ($left, $right) = split(/\s*=>\s*/, $_, 2);
$left =~ s/^\s*//;
$left =~ tr/A-Z/a-z/;
$right =~ s/\s+$//;
$db{$left} = $right;
print $left ." => ". $right ."\n" if (!(++$dcount % 100));
}
close(IN);
untie(%db) || die "untie() on $dbname failed: $!";