Explorar o código

Change how aliases are handled -- should be faster

Also correct small bug in debug output from last change...
sbingner %!s(int64=25) %!d(string=hai) anos
pai
achega
6bd33f6f3d
Modificáronse 1 ficheiros con 14 adicións e 13 borrados
  1. 14 13
      pisg.pl

+ 14 - 13
pisg.pl

@@ -300,8 +300,8 @@ sub init_config
                     my @thisalias = split(/\s+/, $1);
                     my @thisalias = split(/\s+/, $1);
                     foreach (@thisalias) {
                     foreach (@thisalias) {
                         $_ =~ s/\*/\.\*/g;
                         $_ =~ s/\*/\.\*/g;
+                        $alias{$_} = $nick;
                     }
                     }
-                    push(@{ $alias{$nick} }, @thisalias);
                 }
                 }
 
 
                 if ($line =~ /pic="([^"]+)"/) {
                 if ($line =~ /pic="([^"]+)"/) {
@@ -340,7 +340,7 @@ sub init_config
                     unless ($conf->{$var} eq $2) {
                     unless ($conf->{$var} eq $2) {
                         $conf->{$var} = $2;
                         $conf->{$var} = $2;
                     }
                     }
-                    debug("Channel conf: $var = $2\n");
+                    debug("Channel conf: $var = $2");
                 }
                 }
                 while (<CONFIG>) {
                 while (<CONFIG>) {
                     last if ($_ =~ /<\/*channel>/i);
                     last if ($_ =~ /<\/*channel>/i);
@@ -349,7 +349,7 @@ sub init_config
                         unless (($conf->{$var} eq $2) || $conf->{cmdl}{$var}) {
                         unless (($conf->{$var} eq $2) || $conf->{cmdl}{$var}) {
                             $conf->{$var} = $2;
                             $conf->{$var} = $2;
                         }
                         }
-                        debug("Conf: $var = $2\n");
+                        debug("Conf: $var = $2");
                     }
                     }
                 }
                 }
                 do_channel();
                 do_channel();
@@ -610,15 +610,15 @@ sub parse_file
                 } elsif (defined($newjoin)) {
                 } elsif (defined($newjoin)) {
                     $joins{$nick}++;
                     $joins{$nick}++;
                 } elsif (defined($newnick) && ($conf->{nicktracking} == 1)) {
                 } elsif (defined($newnick) && ($conf->{nicktracking} == 1)) {
-                    if (find_alias($newnick) eq $newnick) {
+                    unless (defined($alias{$newnick})) {
                         if (defined($alias{$nick}) && !defined($alias{$newnick})) {
                         if (defined($alias{$nick}) && !defined($alias{$newnick})) {
-                            push (@{$alias{$nick}}, $newnick);
+                            $alias{$newnick} = $nick;
                         } elsif (defined($alias{$newnick}) && !defined($alias{$nick})) {
                         } elsif (defined($alias{$newnick}) && !defined($alias{$nick})) {
-                            push (@{$alias{$newnick}}, $nick);
+                            $alias{$nick} = $newnick;
                         } elsif ($nick =~ /Guest/) {
                         } elsif ($nick =~ /Guest/) {
-                            push (@{$alias{$newnick}}, ($newnick, $nick));
+                            $alias{$nick} = $newnick;
                         } else {
                         } else {
-                            push (@{$alias{$nick}}, ($nick, $newnick));
+                            $alias{$newnick} = $nick;
                         }
                         }
                     }
                     }
                 }
                 }
@@ -1008,11 +1008,12 @@ sub find_alias
 {
 {
     my $nick = shift;
     my $nick = shift;
 
 
-    foreach (keys %alias) {
-        return $_ if (grep /^\Q$nick\E$/i, @{$alias{$_}});
-        if (grep /\*/, @{$alias{$_}}) {
-            foreach my $alias (@{$alias{$_}}) {
-                return $_ if ($nick =~ /^$alias$/);
+    if ($alias{$nick}) {
+        return $alias{$nick};
+    } else {
+        foreach (keys %alias) {
+            if (($_ =~ /\.\*/) && ($nick =~ /^$_$/)) {
+                return $alias{$_};
             }
             }
         }
         }
     }
     }