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.

72 lines
1.2 KiB
Perl

#!/usr/bin/perl
$dbmdir = "/home/infobot/";
$dbmpref = "infobot";
&opendbs;
if (@ARGV) {
$query = join(" ", @ARGV);
&respond($query);
} else {
print "> ";
while (<>) {
last if /^\/?quit/i;
chomp;
if (/s^\/eval\s+/) {
$x = eval($_);
print $x;
} else {
&respond($_);
}
print "> ";
}
}
sub opendbs {
my $dp = "$dbmdir/$dbmpref";
dbmopen(%is, "$dbmdir/$dbmpref-is", undef)
|| die "can't open $dbmdir/$dbmpref-is -- please set path";
dbmopen(%are, "$dbmdir/$dbmpref-are", undef)
|| die "can't open $dbmdir/$dbmpref-are";
}
sub checkdbs {
my @reply;
foreach $k (@_) {
push @reply, $is{$k} if $is{$k};
push @reply, $are{$k} if $are{$k};
}
return @reply;
}
sub respond {
my $query = $_[0];
my @r;
$query =~ tr/A-Z/a-z/;
$query =~ s/wh\S+\s+(is|are)\s+//;
$query =~ s/\s*\?\s*$//;
if ($query =~ /\s+(are|is)\s+/i) {
$lhs = $`; $verb = $1; $rhs = $';
chomp $rhs;
$$verb{$lhs} = $rhs;
} else {
if (@r = &checkdbs($query)) {
foreach (@r) {
chomp;
print "$_\n";
}
} else {
print "undefined: $query\n";
}
}
}
sub dump {
foreach (keys %is) {
print "$_ => $is{$_}\n";
}
}