57de0c435123a1ae595bb7571d4b268b3dd744ab
[p5sagit/p5-mst-13.2.git] / Porting / checkAUTHORS.pl
1 #!/usr/bin/perl -w
2 use strict;
3 use Text::Wrap;
4 $Text::Wrap::columns = 80;
5 my ($committer, $patch, $log,$date);
6 use Getopt::Long;
7
8 my ($rank, $percentage, $cumulative, $reverse, $ta, @authors, %authors,
9     %untraced, %patchers, %committers, %real_names);
10 my $result = GetOptions ("rank" => \$rank,            # rank authors
11              "thanks-applied" => \$ta,        # ranks committers
12              "acknowledged=s"   => \@authors ,  # authors files
13              "percentage" => \$percentage,      # show as %age
14              "cumulative" => \$cumulative,
15              "reverse" => \$reverse,
16             );
17
18 if (!$result or (($rank||0) + ($ta||0) + (@authors ? 1 : 0) != 1) or !@ARGV) {
19   die <<"EOS";
20 $0 --rank Changelogs                        # rank authors by patches
21 $0 --acknowledged <authors file> Changelogs # Display unacknowledged authors
22 $0 --thanks-applied Changelogs            # ranks committers
23 $0 --percentage ...                         # show rankings as percentages
24 $0 --cumulative ...                         # show rankings cumulatively
25 $0 --reverse ...                            # show rankings in reverse
26 Specify stdin as - if needs be. Remember that option names can be abbreviated.
27 EOS
28 }
29
30
31 my $prev = "";
32 my %map;
33
34 while (<DATA>) {
35     chomp;
36     s/\\100/\@/g;
37     $_ = lc;
38     if (my ($correct, $alias) = /^\s*([^#\s]\S*)\s+(.*\S)/) {
39         $correct =~ s/^\\043/#/;
40         if ($correct eq '+') {$correct = $prev} else {$prev = $correct}
41         $map {$alias} = $correct;
42     }
43 }
44
45 #
46 # Email addresses for we do not have names.
47 #
48 $map {$_} = "?" for 
49     "agrow\100thegotonerd.com",
50     "alexander_bluhm\100genua.de",
51     "alexander_gernler\100genua.de",
52     "ammon\100rhythm.com",
53     "andrew\100sundale.net",
54     "bah\100longitude.com",
55     "bbucklan\100jpl-devvax.jpl.nasa.gov",
56     "ben\100linuxgazette.net",
57     "bilbo\100ua.fm",
58     "blino\100mandriva.com",
59     "bob\100starlabs.net",
60     "bonefish\100cs.tu-berlin.de",
61     "bstrand\100switchmanagement.com",
62     "cygwin\100cygwin.com",
63     "david\100dhaller.de",
64     "dformosa\100dformosa.zeta.org.au",
65     "dgay\100acm.org",
66     "erik\100cs.uni-jena.de",
67     "glasser\100tang-eleven-seventy-nine.mit.edu",
68     "gml4410\100ggr.co.uk",
69     "grommel\100sears.com",
70     "ilmari\100vesla.ilmari.org",
71     "ilya\100juil.nonet",
72     "info\100lingo.kiev.ua",
73     "jms\100mathras.comcast.net",
74     "johnh\100isi.edu",
75     "kan\100dcit.cz",
76     "kaminsky\100math.huji.ac.il",
77     "knew-p5p\100pimb.org",
78     "kvr\100centrum.cz",
79     "lemkemch\100t-online.de",
80     "mauzo\100csv.warwick.ac.uk",
81     "mlelstv\100serpens.de",
82     "p.boven\100sara.nl",
83     "padre\100elte.hu",
84     "pancho\100pancho.name",
85     "perlbug\100veggiechinese.net",
86     "pm\100capmon.dk",
87     "premchai21\100yahoo.com",
88     "pxm\100nubz.org",
89     "raf\100tradingpost.com.au",
90     "scott\100perlcode.org",
91     "smoketst\100hp46t243.cup.hp.com",
92     "yath-perlbug\100yath.de",
93 ;
94
95 #
96 # Email addresses for people that don't have an email address in AUTHORS
97 # Presumably deliberately?
98
99
100 $map {$_} = '!' for
101      # Nick Ing-Simmons has passed away (2006-09-25).
102      "nick\100ing-simmons.net",
103      "nik\100tiuk.ti.com",
104      "nick.ing-simmons\100elixent.com",
105      "nick\100ni-s.u-net.com",
106          "nick.ing-simmons\100tiuk.ti.com",
107
108      # Iain Truskett has passed away (2003-12-29).
109      "perl\100dellah.anu.edu.au",
110      "spoon\100dellah.org",
111      "spoon\100cpan.org",
112
113      # Ton Hospel
114      "me-02\100ton.iguana.be",
115      "perl-5.8.0\100ton.iguana.be",
116      "perl5-porters\100ton.iguana.be",
117
118      # Beau Cox
119      "beau\100beaucox.com",
120
121      # Randy W. Sims 
122      "ml-perl\100thepierianspring.org",
123
124      # perl internal addresses
125      "perl5-porters\100africa.nicoh.com",
126          "perlbug\100perl.org",,
127      "perl5-porters.nicoh.com",
128          "perlbug-followup\100perl.org",
129          "perlbug-comment\100perl.org",
130          "bug-module-corelist\100rt.cpan.org",
131          "bug-storable\100rt.cpan.org",
132          "bugs-perl5\100bugs6.perl.org",
133          "unknown",
134          "unknown\100unknown",
135          "unknown\100perl.org",
136         "",
137         "(none)",
138 ;
139
140
141 if (@authors) {
142   my %raw;
143   foreach my $filename (@authors) {
144     open FH, "<$filename" or die "Can't open $filename: $!";
145     while (<FH>) {
146       next if /^\#/;
147       next if /^-- /;
148       if (/<([^>]+)>/) {
149     # Easy line.
150     $raw{$1}++;
151       } elsif (/^([-A-Za-z0-9 .\'À-ÖØöø-ÿ]+)[\t\n]/) {
152     # Name only
153     $untraced{$1}++;
154       } else {
155     chomp;
156     warn "Can't parse line '$_'";
157       }
158     }
159   }
160   foreach (keys %raw) {
161     print "E-mail $_ occurs $raw{$_} times\n" if $raw{$_} > 1;
162     $_ = lc $_;
163     $authors{$map{$_} || $_}++;
164   }
165   ++$authors{'!'};
166   ++$authors{'?'};
167 }
168
169 my @lines = split(/^commit\s*/sm,join('',<>));
170 for ( @lines) {
171     next if m/^$/;
172   next if m/^(\S*?)^Merge:/ism; # skip merge commits
173   if (m/^(.*?)^Author:\s*(.*?)^Date:\s*(.*?)^(.*)$/gism) {
174     # new patch
175     ($patch, $committer, $date,$log) = ($1,$2,$3,$4);
176     chomp($committer);
177     unless ($committer) { die $_}
178     &process ($committer, $patch, $log);
179 } else { die "XXX $_ did not match";}
180 }
181
182
183 if ($rank) {
184   &display_ordered(\%patchers);
185 } elsif ($ta) {
186   &display_ordered(\%committers);
187 } elsif (%authors) {
188   my %missing;
189   foreach (sort keys %patchers) {
190     next if $authors{$_};
191     # Sort by number of patches, then name.
192     $missing{$patchers{$_}}->{$_}++;
193   }
194   foreach my $patches (sort {$b <=> $a} keys %missing) {
195     print "\n\n=head1 $patches patch(es)\n\n";
196     foreach my $author (sort keys %{$missing{$patches}}) {
197         my $xauthor = $author;
198         $xauthor =~ s/@/\\100/g; # xxx temp hack
199           print "".($real_names{$author}||$author) ."\t\t\t<" . $xauthor.">\n" ;
200     }
201   }
202 }
203
204 sub display_ordered {
205   my $what = shift;
206   my @sorted;
207   my $total;
208   while (my ($name, $count) = each %$what) {
209     push @{$sorted[$count]}, $name;
210     $total += $count;
211   }
212
213   my $i = @sorted;
214   return unless @sorted;
215   my $sum = 0;
216   foreach my $i ($reverse ? 0 .. $#sorted : reverse 0 .. $#sorted) {
217     next unless $sorted[$i];
218     my $prefix;
219     $sum += $i * @{$sorted[$i]};
220     # Value to display is either this one, or the cumulative sum.
221     my $value = $cumulative ? $sum : $i;
222     if ($percentage) {
223     $prefix = sprintf "%6.2f:\t", 100 * $value / $total;
224     } else {
225     $prefix = "$value:\t";
226     }
227     print wrap ($prefix, "\t", join (" ", sort @{$sorted[$i]}), "\n");
228   }
229 }
230
231 sub process {
232   my ($committer, $patch, $log) = @_;
233   return unless $committer;
234   my @authors = $log =~ /From:\s+.*?([^"\@ \t\n<>]+\@[^"\@ \t\n<>]+)/gm;
235
236   if (@authors) {
237     foreach my $addr (@authors) {
238
239       $patchers{_raw_address($addr)}++;
240     }
241     # print "$patch: @authors\n";
242     $committers{_raw_address($committer)}++;
243   } else {
244       # print "$patch: $committer\n";
245     # Not entirely fair as this means that the maint pumpking scores for
246     # everything intergrated that wasn't a third party patch in blead
247     $patchers{_raw_address($committer)}++;
248   }
249 }
250
251 sub _raw_address {
252     my $addr = shift;
253     my $real_name;
254     if ($addr =~ /<.*>/) {
255     $addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/ ;
256      $real_name = $1;
257     }
258     $addr = lc $addr;
259     $addr = $map{$addr} || $addr;
260     
261     if ($real_name) { $real_names{$addr} = $real_name};
262     return $addr;
263 }
264
265
266 __DATA__
267
268 #
269 # List of mappings. First entry the "correct" email address, as appears
270 # in the AUTHORS file. Second is any "alias" mapped to it.
271 #
272 # If the "correct" email address is a '+', the entry above is reused; 
273 # this for addresses with more than one alias.
274 #
275 # Note that all entries are in lowercase. Further, no '@' signs should
276 # appear; use \100 instead.
277 #
278 #
279 #  Committers.
280 #
281 adi                                     enache\100rdslink.ro
282 alanbur                                 alan.burlison\100sun.com
283 +                                       alan.burlison\100uk.sun.com
284 +                                       aburlison\100cix.compulink.co.uk
285 ams                                     ams\100toroid.org
286 +                                       ams\100wiw.org
287 chip                                    chip\100pobox.com
288 +                                       chip\100perl.com
289 +                                       salzench\100nielsenmedia.com
290 +                                       chip\100atlantic.net
291 +                                       chip\100rio.atlantic.net
292 +                                       salzench\100dun.nielsen.com
293 craigb                                  craig.berry\100psinetcs.com
294 +                                       craig.berry\100metamorgs.com
295 +                                       craig.berry\100signaltreesolutions.com
296 +                                       craigberry\100mac.com
297 +                                       craig.a.berry\100gmail.com
298 +                                                                               craig a. berry)
299 davem                                   davem\100fdgroup.com
300 +                                       davem\100iabyn.nospamdeletethisbit.com
301 +                                       davem\100iabyn.com
302 +                                       davem\100fdgroup.co.uk
303 +                                       davem\100fdisolutions.com
304 +                                       davem\100iabyn.com
305 demerphq                                demerphq\100gmail.com
306 +                                       yves.orton\100de.mci.com
307 +                                       yves.orton\100mciworldcom.de
308 +                                       demerphq\100dromedary.booking.com
309 +                                       demerphq\100gemini.(none)
310 +                                       demerphq\100camel.booking.com
311 +                                       demerphq\100hotmail.com
312 doughera                                doughera\100lafayette.edu
313 +                                       doughera\100lafcol.lafayette.edu
314 +                                       doughera\100fractal.phys.lafayette.edu
315 +                                       doughera.lafayette.edu
316 +                                       doughera\100newton.phys.lafayette.edu
317
318 gbarr                                   gbarr\100pobox.com
319 +                                       bodg\100tiuk.ti.com
320 +                                       gbarr\100ti.com
321 +                                       graham.barr\100tiuk.ti.com
322 +                                                                               gbarr\100monty.mutatus.co.uk
323 gisle                                   gisle\100activestate.com
324 +                                       gisle\100aas.no
325 +                                       aas\100aas.no
326 +                                       aas\100bergen.sn.no
327 gsar                                    gsar\100activestate.com
328 +                                       gsar\100cpan.org
329 +                                       gsar\100engin.umich.edu
330 hv                                      hv\100crypt.compulink.co.uk
331 +                                       hv\100crypt.org
332 +                                       hv\100iii.co.uk
333 jhi                                     jhi\100iki.fi
334 +                                       jhietaniemi\100gmail.com
335 +                                       jhi\100kosh.hut.fi
336 +                                       jhi\100alpha.hut.fi
337 +                                       jhi\100cc.hut.fi
338 +                                       jhi\100hut.fi
339 +                                       jarkko.hietaniemi\100nokia.com
340 +                                       jarkko.hietaniemi\100cc.hut.fi
341 jesse                                   jesse\100bestpractical.com
342 +                                       jesse\100fsck.com
343 +                                       jesse\100perl.org
344 merijn                                  h.m.brand\100xs4all.nl
345 +                                       h.m.brand\100hccnet.nl
346 +                                       merijn\100l1.procura.nl
347 +                                                                               merijn\100a5.(none)
348 +                                                                               merijnb\100ms.com
349 +                                                                               merijnb\100iloquent.nl
350 +                                                                               merijnb\100iloquent.com
351 mhx                                     mhx-perl\100gmx.net
352 +                                                                               mhx\100r2d2.(none)
353 nicholas                                nick\100unfortu.net
354 +                                       nick\100ccl4.org
355 +                                       nick\100talking.bollo.cx
356 +                                       nick\100plum.flirble.org
357 +                                       nick\100babyhippo.co.uk
358 +                                       nick\100bagpuss.unfortu.net
359 +                                                                               Nicholas Clark (sans From field in mail header)
360 pudge                                   pudge\100pobox.com
361 rgs                                     rgarciasuarez\100free.fr
362 +                                       rgarciasuarez\100mandrakesoft.com
363 +                                       rgarciasuarez\100mandriva.com
364 +                                       rgarciasuarez\100gmail.com
365 +                                       raphel.garcia-suarez\100hexaflux.com
366 sky                                     sky\100nanisky.com
367 +                                       artur\100contiller.se
368 +                                       arthur\100contiller.se
369 steveh                                  stevehay\100planit.com
370 +                                       steve.hay\100uk.radan.com
371 stevep                                  steve\100fisharerojo.org
372 +                                       steve.peters\100gmail.com
373 timb                                    Tim.Bunce\100pobox.com
374 +                                       tim.bunce\100ig.co.uk
375
376
377 #
378 # Mere mortals.
379 #
380 \043####\100juerd.nl                    juerd\100cpan.org
381 +                                       juerd\100convolution.nl
382 7k8lrvf02\100sneakemail.com             kjx9zthh3001\100sneakemail.com
383 +                                       dtr8sin02\100sneakemail.com
384 +                                       rt8363b02\100sneakemail.com
385 +                                       o6hhmk002\100sneakemail.com
386 +                                       smueller\100cpan.org
387 +                                       l2ot9pa02\100sneakemail.com
388 +                                       wyp3rlx02\100sneakemail.com
389 +                                       0mgwtfbbq\100sneakemail.com
390
391 a.r.ferreira\100gmail.com               aferreira\100shopzilla.com
392 abe\100ztreet.demon.nl                  abeltje\100cpan.org
393 abela\100hsc.fr                         abela\100geneanet.org
394 abigail\100abigail.be                   abigail\100foad.org
395 +                                       abigail\100abigail.nl
396 +                                       abigail\100fnx.com
397 aburt\100isis.cs.du.edu                                 isis!aburt
398 ach\100mpe.mpg.de                       ach\100rosat.mpe-garching.mpg.de
399 adavies\100ptc.com                                              alex.davies\100talktalk.net
400 ajohnson\100nvidia.com                  ajohnson\100wischip.com
401 alexm\100netli.com                      alexm\100w-m.ru
402 alex-p5p\100earth.li                    alex\100rcon.rog
403 alexmv\100mit.edu                       alex\100chmrr.net
404 alian\100cpan.org                       alian\100alianwebserver.com
405 allen\100grumman.com                    allen\100gateway.grumman.com
406 allen\100huarp.harvard.edu              nort\100bottesini.harvard.edu
407 +                                                                               nort\100qnx.com
408 allens\100cpan.org                      easmith\100beatrice.rutgers.edu
409 andreas.koenig\100anima.de              andreas.koenig.gmwojprw\100franz.ak.mind.de
410 +                                       andreas.koenig.7os6vvqr\100franz.ak.mind.de
411 +                                       a.koenig\100mind.de
412 +                                       k\100anna.in-berlin.de
413 +                                       andk\100cpan.org
414 +                                       koenig\100anna.mind.de
415 +                                       k\100anna.mind.de
416 +                                                                               root\100ak-71.mind.de
417 +                                                                               root\100ak-75.mind.de
418 +                                                                               k\100sissy.in-berlin.de
419 +                                                                               a.koenig\100kulturbox.de
420 +                                                                               k\100sissy.in-berlin.de
421 anno4000\100lublin.zrz.tu-berlin.de     anno4000\100mailbox.tu-berlin.de
422 +                                       siegel\100zrz.tu-berlin.de
423 arnold\100gnu.ai.mit.edu                                        arnold\100emoryu2.arpa
424 +                                                                               gatech!skeeve!arnold
425 ash\100cpan.org                         ash_cpan\100firemirror.com
426 avarab\100gmail.com                     avar\100cpan.org
427
428 bailey\100newman.upenn.edu              bailey\100hmivax.humgen.upenn.edu
429 +                                       bailey\100genetics.upenn.edu
430 +                                                                               bailey.charles\100gmail.com
431 bah\100ecnvantage.com                   bholzman\100longitude.com
432 bcarter\100gumdrop.flyinganvil.org      q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
433 ben_tilly\100operamail.com              btilly\100gmail.com
434 +                                                                               ben_tilly\100hotmail.com
435 ben\100morrow.me.uk                                             mauzo\100csv.warwick.ac.uk
436 +                                                                               mauzo\100.(none)
437 BQW10602\100nifty.com                                   sadahiro\100cpan.org
438
439 chromatic\100wgz.org                    chromatic\100rmci.net
440 clintp\100geeksalad.org                                 cpierce1\100ford.com
441 clkao\100clkao.org                      clkao\100bestpractical.com
442 corion\100corion.net                    corion\100cpan.org
443 cp\100onsitetech.com                    publiustemp-p5p\100yahoo.com
444 +                                       publiustemp-p5p3\100yahoo.com
445 cpan\100audreyt.org                     autrijus\100egb.elixus.org
446 +                                       autrijus\100geb.elixus.org
447 +                                       autrijus\100gmail.com
448 +                                       autrijus\100ossf.iis.sinica.edu.tw
449 +                                       autrijus\100autrijus.org
450 +                                       audreyt\100audreyt.org
451 crt\100kiski.net                                                perl\100ctweten.amsite.com
452
453 damian\100conway.org                                    damian\100cs.monash.edu.au
454 dagolden\100cpan.org                    xdaveg\100gmail.com
455 dan\100sidhe.org                        sugalsd\100lbcc.cc.or.us
456 +                                       sugalskd\100osshe.edu
457 david.dyck\100fluke.com                 dcd\100tc.fluke.com
458 david\100kineticode.com                                 david\100wheeler.com
459 +                                                                               david\100wheeler.net
460 djberg86\100attbi.com                                   djberg96\100attbi.com
461 domo\100computer.org                    shouldbedomo\100mac.com
462 +                                       domo\100slipper.ip.lu
463 +                                                                               domo\100tcp.ip.lu
464 dougm\100covalent.net                   dougm\100opengroup.org
465 +                                       dougm\100osf.org
466 dougw\100cpan.org                                               doug_wilson\100intuit.com
467
468 egf7\100columbia.edu                    efifer\100sanwaint.com
469 eggert\100twinsun.com                                   eggert\100sea.sm.unisys.com
470 epeschko\100den-mdev1                   esp5\100pge.com
471
472 fugazi\100zyx.net                       larrysh\100cpan.org
473 +                                                                               lshatzer\100islanddata.com
474
475 gbacon\100itsc.uah.edu                                          gbacon\100adtrn-srv4.adtran.com
476 gfuji\100cpan.org                                               g.psy.va\100gmail.com
477 gibreel\100pobox.com                    stephen.zander\100interlock.mckesson.com
478 +                                       srz\100loopback
479 gnat\100frii.com                        gnat\100prometheus.frii.com
480 gp\100familiehaase.de                   gerrit\100familiehaase.de
481 grazz\100pobox.com                      grazz\100nyc.rr.com
482 gward\100ase.com                                                greg\100bic.mni.mcgill.ca
483 hansmu\100xs4all.nl                     hansm\100icgroup.nl
484 +                                       hansm\100icgned.nl
485 +                                       hans\100icgned.nl
486 +                                       hans\100icgroup.nl
487 +                                       hansm\100euronet.nl
488 hio\100ymir.co.jp                       hio\100hio.jp
489 hops\100sco.com                                                 hops\100scoot.pdev.sco.com
490
491 james\100mastros.biz                                            theorb\100desert-island.me.uk
492 jand\100activestate.com                                 jan.dubois\100ibm.net
493 japhy\100pobox.com                      japhy\100pobox.org
494 +                                       japhy\100perlmonk.org
495 +                                       japhy\100cpan.org
496 +                                                                               jeffp\100crusoe.net
497 jari.aalto\100poboxes.com               jari.aalto\100cante.net
498 jcromie\100divsol.com                   jcromie\100cpan.org
499 +                                       jim.cromie\100gmail.com
500 jidanni\100jidanni.org                                  jidanni\100hoffa.dreamhost.com
501 jdhedden\100cpan.org                    jerry\100hedden.us
502 +                                       jdhedden\1001979.usna.com
503 +                                       jdhedden\100gmail.com
504 +                                       jdhedden\100yahoo.com
505 +                                                                               jhedden\100pn100-02-2-356p.corp.bloomberg.com
506 jeremy\100zawodny.com                                   jzawodn\100wcnet.org
507 jesse\100sig.bsh.com                                    jesse\100ginger
508 jfriedl\100yahoo.com                    jfriedl\100yahoo-inc.com
509 jhannah\100omnihotels.com                                       jay\100jays.net
510 jjore\100cpan.org                       twists\100gmail.com
511 jns\100integration-house.com            jns\100gellyfish.com
512 +                                       gellyfish\100gellyfish.com
513 john\100atlantech.com                                   john\100titanic.atlantech.com
514 john\100johnwright.org                                  john.wright\100hp.com
515 joseph\100cscaper.com                                   joseph\1005sigma.com
516 joshua\100rodd.us                                                       jrodd\100pbs.org
517 jtobey\100john-edwin-tobey.org                          jtobey\100user1.channel1.com
518 jpeacock\100rowman.com                  john.peacock\100havurah-software.org
519 +                                       jpeacock\100havurah-software.org
520 +                                                                               jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
521 jql\100accessone.com                                    jql\100jql.accessone.com
522 jsm28\100hermes.cam.ac.uk                                       jsm28\100cam.ac.uk
523
524 kane\100dwim.org                        kane\100xs4all.net
525 +                                       kane\100cpan.org
526 +                                       kane\100xs4all.nl
527 +                                       jos\100dwim.org
528 +                                       jib\100ripe.net
529 ken\100mathforum.org                    kenahoo\100gmail.com
530 kroepke\100dolphin-services.de          kay\100dolphin-services.de
531 kstar\100wolfetech.com                  kstar\100cpan.org
532 +                                       kurt_starsinic\100ml.com
533 +                                                                               kstar\100www.chapin.edu
534 +                                                                               kstar\100chapin.edu
535 larry\100wall.org                       lwall\100jpl-devvax.jpl.nasa.gov
536 +                                       lwall\100netlabs.com
537 +                                       larry\100netlabs.com
538 +                                       lwall\100sems.com
539 +                                       lwall\100scalpel.netlabs.com
540 laszlo.molnar\100eth.ericsson.se                        molnarl\100cdata.tvnet.hu
541 lewart\100uiuc.edu                      lewart\100vadds.cvm.uiuc.edu    
542 +                                       d-lewart\100uiuc.edu
543 lstein\100cshl.org                                              lstein\100formaggio.cshl.org
544 +                                                                               lstein\100genome.wi.mit.edu
545 lupe\100lupe-christoph.de                                       lupe\100alanya.m.isar.de
546 lutherh\100stratcom.com                                 lutherh\100infinet.com
547 mab\100wdl.loral.com                                            markb\100rdcf.sm.unisys.com
548 marcel\100codewerk.com                  gr\100univie.ac.at
549 mark.p.lutz\100boeing.com                                       tecmpl1\100triton.ca.boeing.com
550 mats\100sm6sxl.net                      mats\100sm5sxl.net
551 mbarbon\100dsi.unive.it                 mattia.barbon\100libero.it
552 mcmahon\100ibiblio.org                  mcmahon\100metalab.unc.edu
553 merlyn\100stonehenge.com                                merlyn\100gadget.cscaper.com
554 mgjv\100comdyn.com.au                   mgjv\100tradingpost.com.au
555 mlh\100swl.msd.ray.com                                          webtools\100uewrhp03.msd.ray.com
556 michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
557 mike\100stok.co.uk                      mike\100exegenix.com
558 mjtg\100cam.ac.uk                       mjtg\100cus.cam.ac.uk
559 mikedlr\100tardis.ed.ac.uk                              mikedlr\100it.com.pl
560 moritz\100casella.verplant.org          moritz\100faui2k3.org
561 +                                                                               moritz lenz
562
563
564 neeracher\100mac.com                                    neeri\100iis.ee.ethz.ch
565 neil\100bowers.com                                              neilb\100cre.canon.co.uk
566 nospam-abuse\100bloodgate.com           tels\100bloodgate.com
567 +                                       perl_dummy\100bloodgate.com
568
569 ian.phillipps\100iname.com                              ian_phillipps\100yahoo.co.uk
570 ignasi.roca\100fujitsu-siemens.com      ignasi.roca\100fujitsu.siemens.es
571 ilya\100math.berkeley.edu               ilya\100math.ohio-state.edu
572 +                                       nospam-abuse\100ilyaz.org
573 +                                                                               [9]ilya\100math.ohio-state.edu
574
575 okamoto\100corp.hp.com                  okamoto\100hpcc123.corp.hp.com
576 orwant\100oreilly.com                                   orwant\100media.mit.edu
577
578 p5-authors\100crystalflame.net          perl\100crystalflame.net
579 +                                       rs\100crystalflame.net
580 +                                       coral\100eekeek.org
581 +                                       coral\100moonlight.crystalflame.net
582 +                                       rs\100oregonnet.com
583 paul.green\100stratus.com               paul_greenvos\100vos.stratus.com
584 +                                                                               pgreen\100seussnt.stratus.com
585 paul.marquess\100btinternet.com         paul_marquess\100yahoo.co.uk
586 +                                       paul.marquess\100ntlworld.com
587 +                                       paul.marquess\100openwave.com
588 +                                       pmarquess\100bfsec.bt.co.uk
589 +                                       pmqs\100cpan.org
590 pcg\100goof.com                         schmorp\100schmorp.de
591 perl\100cadop.com                       cdp\100hpescdp.fc.hp.com
592 perl\100greerga.m-l.org                                 greerga\100m-l.org
593 perl\100profvince.com                   vince\100profvince.com
594 perl-rt\100wizbit.be                    p5p\100perl.wizbit.be
595 # Maybe we should special case this to get real names out?
596 Peter.Dintelmann\100Dresdner-Bank.com   peter.dintelmann\100dresdner-bank.com 
597 # NOTE: There is an intentional trailing space in the line above
598 pfeifer\100wait.de                      pfeifer\100charly.informatik.uni-dortmund.de
599 +                                                                               upf\100de.uu.net
600 phil\100perkpartners.com                phil\100finchcomputer.com
601 pimlott\100idiomtech.com                andrew\100pimlott.net
602 +                                                                               pimlott\100abel.math.harvard.edu
603 pixel\100mandriva.com                                           pixel\100mandrakesoft.com
604 pne\100cpan.org                         philip.newton\100gmx.net
605 +                                       philip.newton\100datenrevision.de
606 +                                       pnewton\100gmx.de
607 pprymmer\100factset.com                 pvhp\100forte.com
608 public\100khwilliamson.com              khw\100karl.(none)
609
610 radu\100netsoft.ro                      rgreab\100fx.ro
611 raphael.manfredi\100pobox.com           raphael_manfredi\100grenoble.hp.com
612 renee.baecker\100smart-websolutions.de          reneeb\100reneeb-desktop.(none)
613 richard.foley\100ubsw.com               richard.foley\100t-online.de
614 +                                       richard.foley\100ubs.com
615 +                                       richard.foley\100rfi.net
616 rick\100consumercontact.com             rick\100bort.ca
617 +                                       rick.delaney\100rogers.com
618 +                                       rick\100bort.ca
619 +                                                                               rick.delaney\100home.com
620 rjbs\100cpan.org                        rjbs-perl-p5p\100lists.manxome.org
621 +                    perl.p5p\100rjbs.manxome.org
622 rjk\100linguist.dartmouth.edu           rjk\100linguist.thayer.dartmouth.edu
623 +                                       rjk-perl-p5p\100tamias.net
624 rjray\100redhat.com                        rjray\100uswest.com
625 rmgiroux\100acm.org                     rmgiroux\100hotmail.com
626 +                                                                               mgiroux\100bear.com
627 rmbarker\100cpan.org                    rmb1\100cise.npl.co.uk
628 +                                       robin.barker\100npl.co.uk
629 +                                       rmb\100cise.npl.co.uk
630 robertmay\100cpan.org                   rob\100themayfamily.me.uk
631 roberto\100keltia.freenix.fr                    roberto\100eurocontrol.fr
632 robin\100cpan.org                       robin\100kitsite.com
633 roderick\100argon.org                   roderick\100gate.net
634 +                                                                               roderick\100ibcinc.com
635 rootbeer\100teleport.com                rootbeer\100redcat.com
636 +                                                                               tomphoenix\100unknown
637 schubiger\100cpan.org                   steven\100accognoscere.org
638 +                                       sts\100accognoscere.org
639 +                                       schubiger\100gmail.com
640 schwern\100pobox.com                    schwern\100gmail.com
641 +                                       schwern\100athens.arena-i.com
642 +                                       schwern\100blackrider.aocn.com
643 +                                       schwern\100ool-18b93024.dyn.optonline.net
644 schotth\100sgi.com                                              author scotth\100sgi.com 842220273 +0000
645 schwab\100suse.de                                               schwab\100issan.informatik.uni-dortmund.de
646 +                                                                               schwab\100ls5.informatik.uni-dortmund.de
647 sebastien\100aperghis.net               maddingue\100free.fr
648 +                                       saper\100cpan.org
649 shlomif\100vipe.technion.ac.il          shlomif\100iglu.org.il
650 simon\100simon-cozens.org               simon\100pembro4.pmb.ox.ac.uk
651 +                                       simon\100brecon.co.uk
652 +                                       simon\100othersideofthe.earth.li
653 +                                       simon\100cozens.net
654 +                                       simon\100netthink.co.uk
655 slaven\100rezic.de                      slaven.rezic\100berlin.de
656 +                                       srezic\100iconmobile.com
657 +                                       srezic\100cpan.org
658 +                                                                               eserte\100cs.tu-berlin.de
659 smcc\100mit.edu                         smcc\100ocf.berkeley.edu
660 +                                       smcc\100csua.berkeley.edu
661 +                                       alias\100mcs.com
662 +                                       smccam\100uclink4.berkeley.edu
663 spider\100orb.nashua.nh.us              spider\100web.zk3.dec.com
664 +                                       spider\100leggy.zk3.dec.com
665 +                                       spider-perl\100orb.nashua.nh.us
666 +                                       spider\100peano.zk3.dec.com
667 +                                       spider.boardman\100orb.nashua.nh.us>
668 +                                       spidb\100cpan.org
669 +                                                                               spider.boardman\100orb.nashua.nh.us
670 spp\100ds.net                           spp\100psa.pencom.com
671 +                                       spp\100psasolar.colltech.com
672 +                                       spp\100spotter.yi.org
673 stef\100mongueurs.net                   stef\100payrard.net
674 +                                       s.payrard\100wanadoo.fr
675 +                                                                               properler\100freesurf.fr
676 +                                                                               stef\100francenet.fr
677 sthoenna\100efn.org                                             ysth\100raven.shiftboard.com
678
679 tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
680 tchrist\100perl.com                      tchrist\100mox.perl.com
681 +                                        tchrist\100jhereg.perl.com
682 thomas.dorner\100start.de                tdorner\100amadeus.net
683 tjenness\100cpan.org                     t.jenness\100jach.hawaii.edu
684 +                                        timj\100jach.hawaii.edu
685 tom.horsley\100mail.ccur.com             tom.horsley\100ccur.com
686 +                                        tom\100amber.ssd.hcsc.com
687
688 vkonovalov\100lucent.com                  vkonovalov\100peterstar.ru
689 +                                         konovalo\100mail.wplus.net
690 +                                         vadim\100vkonovalov.ru
691 +                                         vkonovalov\100spb.lucent.com
692 +                                         vkonovalov\100alcatel-lucent.com
693
694 whatever\100davidnicol.com                davidnicol\100gmail.com
695 wolfgang.laun\100alcatel.at               wolfgang.laun\100chello.at
696 +                                         wolfgang.laun\100thalesgroup.com
697 +                                         wolfgang.laun\100gmail.com