]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/Dict.pl
system() == evil
[infobot.git] / src / Modules / Dict.pl
index 9c49a5bde7d94a96874fee637fac355cf3804ff1..a82fa000c7a6830d5e40d7127e1c8ea0d9f36bd7 100644 (file)
@@ -4,6 +4,8 @@
 #  Version: v0.6c (20000924).
 #  Created: 19990914.
 #
+# see http://luetzschena-stahmeln.de/dictd/
+# for a list of dict servers
 
 package Dict;
 
@@ -12,17 +14,16 @@ use strict;
 
 #use vars qw(PF_INET);
 
-my $server     = "dict.org";   # need a specific host||ip.
-
-###local $SIG{ALRM} = sub { die "alarm\n" };
+# need a specific host||ip.
+my $server     = "dict.org";
 
 sub Dict {
     my ($query) = @_;
 #    return unless &::loadPerlModule("IO::Socket");
-    my $socket = new IO::Socket;
     my $port   = 2628;
     my $proto  = getprotobyname('tcp');
     my @results;
+    my $retval;
 
     for ($query) {
        s/^[\s\t]+//;
@@ -31,17 +32,19 @@ sub Dict {
     }
 
     # connect.
-# TODO: make strict-safe constants... so we can defer IO::Socket load.
+    # TODO: make strict-safe constants... so we can defer IO::Socket load.
+    my $socket = new IO::Socket;
     socket($socket, PF_INET, SOCK_STREAM, $proto) or return "error: socket: $!";
     eval {
+       local $SIG{ALRM} = sub { die "alarm" };
        alarm 10;
-       connect($socket, sockaddr_in($port, inet_aton($server))) or return "error: connect: $!";
+       connect($socket, sockaddr_in($port, inet_aton($server))) or die "error: connect: $!";
        alarm 0;
     };
 
-    my $retval;
-    if ($@ && $@ ne "alarm\n") {       # failure.
-       $retval = "i could not get info from dict.org";
+    if ($@) {
+       # failure.
+       $retval = "i could not get info from $server '$@'";
     } else {                           # success.
        $socket->autoflush(1);  # required.
 
@@ -102,6 +105,7 @@ sub Dict_Wordnet {
        chop;   # remove \n
        chop;   # remove \r
 
+       &::DEBUG("got '$_'");
        if ($_ eq ".") {                                # end of def.
            push(@results, $def);
        } elsif (/^250 /) {                             # stats.
@@ -148,6 +152,7 @@ sub Dict_Foldoc {
        chop;   # remove \n
        chop;   # remove \r
 
+       &::DEBUG("got '$_'");
        return if /^552 /;              # no match.
 
        if ($firsttime) {