3 my ($committer, $patch, $author);
7 $Text::Wrap::columns = 80;
9 my ($rank, $ta, $ack, $who, $tap) = (0) x 5;
10 my ($author_file, $percentage, $cumulative, $reverse);
11 my (%authors, %untraced, %patchers, %committers, %real_names);
13 my $result = GetOptions (
17 "thanks-applied" => \$ta,
22 "authors=s" => \$author_file,
23 "percentage" => \$percentage, # show as %age
24 "cumulative" => \$cumulative,
25 "reverse" => \$reverse,
28 if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) {
32 $author_file ||= './AUTHORS';
33 die "Can't locate '$author_file'. Specify it with '--authors <path>'."
34 unless -f $author_file;
36 my $map = generate_known_author_map();
38 read_authors_files($author_file);
42 parse_commits_from_stdin();
43 display_ordered(\%patchers);
45 parse_commits_from_stdin();
46 display_ordered(\%committers);
48 parse_commits_from_stdin_authors();
49 display_test_output(\%patchers, \%authors, \%real_names);
51 parse_commits_from_stdin();
52 display_missing_authors(\%patchers, \%authors, \%real_names);
54 parse_commits_from_stdin();
55 list_authors(\%patchers, \%authors);
63 Usage: $0 [modes] [modifiers] <git-log-output-file>
66 --who # show list of unique authors by full name
67 --rank # rank authors by patches
68 --thanks-applied # ranks committers of others' patches
69 --missing # display authors not in AUTHORS
70 --tap # show authors present/missing as TAP
73 --authors <authors-file> # path to authors file (default: ./AUTHORS)
74 --percentage # show rankings as percentages
75 --cumulative # show rankings cumulatively
76 --reverse # show rankings in reverse
78 Generate git-log-output-file with git log --pretty=fuller rev1..rev2
79 (or pipe by specifying '-' for stdin). For example:
80 \$ git log --pretty=fuller v5.12.0..v5.12.1 > gitlog
81 \$ perl Porting/checkAUTHORS.pl --rank --percentage gitlog
86 my ($patchers, $authors) = @_;
87 binmode(STDOUT, ":utf8");
88 print wrap '', '', join(', ', sort { lc $a cmp lc $b }
89 map { $authors->{$_} }
90 keys %$patchers) . ".\n";
93 sub parse_commits_from_stdin {
94 my @lines = split( /^commit\s*/sm, join( '', <> ) );
97 next if m/^(\S*?)^Merge:/ism; # skip merge commits
98 if (m/^(.*?)^Author:\s*(.*?)^AuthorDate:\s*.*?^Commit:\s*(.*?)^(.*)$/gism) {
101 ( $patch, $author, $committer ) = ( $1, $2, $3 );
103 unless ($author) { die $_ }
105 unless ($committer) { die $_ }
106 process( $committer, $patch, $author );
108 die "XXX $_ did not match";
114 # just grab authors. Quicker than parse_commits_from_stdin
116 sub parse_commits_from_stdin_authors {
118 next unless /^Author:\s*(.*)$/;
120 $author = _raw_address($author);
121 $patchers{$author}++;
126 sub generate_known_author_map {
134 if ( my ( $correct, $alias ) = /^\s*([^#\s]\S*)\s+(.*\S)/ ) {
135 $correct =~ s/^\\043/#/;
136 if ( $correct eq '+' ) { $correct = $prev }
137 else { $prev = $correct }
138 $map{$alias} = $correct;
143 # Email addresses for we do not have names.
147 "bah\100longitude.com",
148 "bbucklan\100jpl-devvax.jpl.nasa.gov",
150 "bob\100starlabs.net",
151 "cygwin\100cygwin.com",
152 "david\100dhaller.de", "erik\100cs.uni-jena.de", "info\100lingo.kiev.ua", # Lingo Translation agency
153 "jms\100mathras.comcast.net",
154 "premchai21\100yahoo.com",
156 "raf\100tradingpost.com.au",
157 "smoketst\100hp46t243.cup.hp.com", "root\100chronos.fi.muni.cz", # no clue - jrv 20090803
158 "gomar\100md.media-web.de", # no clue - jrv 20090803
159 "data-drift\100so.uio.no", # no data. originally private message from 199701282014.VAA12645@selters.uio.no
160 "arbor\100al37al08.telecel.pt"
161 , # reported perlbug ticket 5196 - no actual code contribution. no real name - jrv 20091006
162 "oracle\100pcr8.pcr.com", # Reported perlbug ticket 1015 - no patch - Probably Ed Eddington ed@pcr.com
163 "snaury\100gmail.com", # Reported cpan ticket 35943, with patch for fix
167 # Email addresses for people that don't have an email address in AUTHORS
168 # Presumably deliberately?
173 # Nick Ing-Simmons has passed away (2006-09-25).
174 "nick\100ing-simmons.net",
175 "nik\100tiuk.ti.com",
176 "nick.ing-simmons\100elixent.com",
177 "nick\100ni-s.u-net.com",
178 "nick.ing-simmons\100tiuk.ti.com",
180 # Iain Truskett has passed away (2003-12-29).
181 "perl\100dellah.anu.edu.au", "spoon\100dellah.org", "spoon\100cpan.org",
184 "me-02\100ton.iguana.be", "perl-5.8.0\100ton.iguana.be", "perl5-porters\100ton.iguana.be",
187 "beau\100beaucox.com",
190 "ml-perl\100thepierianspring.org",
192 # perl internal addresses
193 "perl5-porters\100africa.nicoh.com",
194 "perlbug\100perl.org",,
195 "perl5-porters.nicoh.com",
196 "perlbug-followup\100perl.org",
197 "perlbug-comment\100perl.org",
198 "bug-module-corelist\100rt.cpan.org",
199 "bug-storable\100rt.cpan.org",
200 "bugs-perl5\100bugs6.perl.org",
202 "unknown\100unknown",
203 "unknown\100longtimeago",
204 "unknown\100perl.org",
212 sub read_authors_files {
214 return unless (@authors);
216 foreach my $filename (@authors) {
217 open FH, "<$filename" or die "Can't open $filename: $!";
218 binmode FH, ':encoding(UTF-8)';
222 if (/^([^<]+)<([^>]+)>/) {
224 my ($name, $email) = ($1, $2);
226 $raw{$email} = $name;
228 } elsif (/^([-A-Za-z0-9 .\'À-ÖØöø-ÿ]+)[\t\n]/) {
232 } elsif ( length $_ ) {
234 warn "Can't parse line '$_'";
240 foreach ( keys %raw ) {
241 print "E-mail $_ occurs $count{$_} times\n" if $count{$_} > 1;
243 $authors{ $map->{$lc} || $lc } = $raw{$_};
245 $authors{$_} = $_ for qw(? !);
248 sub display_test_output {
249 my $patchers = shift;
251 my $real_names = shift;
253 printf "1..%d\n", scalar keys %$patchers;
254 foreach ( sort keys %$patchers ) {
256 if ($authors->{$_}) {
257 print "ok $count - ".$real_names->{$_} ." $_\n";
259 print "not ok $count - Contributor not found in AUTHORS: $_ ".($real_names->{$_} || '???' )."\n";
265 sub display_missing_authors {
266 my $patchers = shift;
268 my $real_names = shift;
270 foreach ( sort keys %$patchers ) {
271 next if $authors->{$_};
273 # Sort by number of patches, then name.
274 $missing{ $patchers{$_} }->{$_}++;
276 foreach my $patches ( sort { $b <=> $a } keys %missing ) {
277 print "\n\n=head1 $patches patch(es)\n\n";
278 foreach my $author ( sort keys %{ $missing{$patches} } ) {
279 my $xauthor = $author;
280 $xauthor =~ s/@/\\100/g; # xxx temp hack
281 print "" . ( $real_names->{$author} || $author ) . "\t\t\t<" . $xauthor . ">\n";
286 sub display_ordered {
291 while ( my ( $name, $count ) = each %$what ) {
292 push @{ $sorted[$count] }, $name;
297 return unless @sorted;
299 foreach my $i ( $reverse ? 0 .. $#sorted : reverse 0 .. $#sorted ) {
300 next unless $sorted[$i];
302 $sum += $i * @{ $sorted[$i] };
304 # Value to display is either this one, or the cumulative sum.
305 my $value = $cumulative ? $sum : $i;
307 $prefix = sprintf "%6.2f:\t", 100 * $value / $total;
309 $prefix = "$value:\t";
311 print wrap ( $prefix, "\t", join( " ", sort @{ $sorted[$i] } ), "\n" );
316 my ( $committer, $patch, $author ) = @_;
317 return unless $author;
318 return unless $committer;
320 $author = _raw_address($author);
321 $patchers{$author}++;
323 $committer = _raw_address($committer);
324 if ( $committer ne $author ) {
326 # separate commit credit only if committing someone else's patch
327 $committers{$committer}++;
334 if ($addr =~ /(?:\\?")?\s*\(via RT\) <perlbug-followup\@perl\.org>$/p) {
335 my $name = ${^PREMATCH};
336 $addr = 'perlbug-followup@perl.org';
338 # Try to find the author
340 if (exists $map->{$name}) {
341 $addr = $map->{$name};
342 $real_name = $authors{$addr};
345 while (my ($email, $author_name) = each %authors) {
346 if ($name eq $author_name) {
354 elsif ( $addr =~ /<.*>/ ) {
355 $addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/;
358 $addr =~ s/\[mailto://;
361 $addr = $map->{$addr} || $addr;
362 $addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
364 if ($real_name) { $real_names{$addr} = $real_name }
372 # List of mappings. First entry the "correct" email address, as appears
373 # in the AUTHORS file. Second is any "alias" mapped to it.
375 # If the "correct" email address is a '+', the entry above it is reused;
376 # this for addresses with more than one alias.
378 # Note that all entries are in lowercase. Further, no '@' signs should
379 # appear; use \100 instead.
384 adi enache\100rdslink.ro
385 alanbur alan.burlison\100sun.com
386 + alan.burlison\100uk.sun.com
387 + aburlison\100cix.compulink.co.uk
388 ams ams\100toroid.org
390 chip chip\100pobox.com
392 + salzench\100nielsenmedia.com
393 + chip\100atlantic.net
394 + chip\100rio.atlantic.net
395 + salzench\100dun.nielsen.com
396 + chip\100ci005.sv2.upperbeyond.com
397 craigb craig.berry\100psinetcs.com
398 + craig.berry\100metamorgs.com
399 + craig.berry\100signaltreesolutions.com
400 + craigberry\100mac.com
401 + craig.a.berry\100gmail.com
403 davem davem\100fdgroup.com
404 + davem\100iabyn.nospamdeletethisbit.com
406 + davem\100fdgroup.co.uk
407 + davem\100fdisolutions.com
409 demerphq demerphq\100gmail.com
410 + yves.orton\100de.mci.com
411 + yves.orton\100mciworldcom.de
412 + yves.orton\100booking.com
413 + demerphq\100dromedary.booking.com
414 + demerphq\100gemini.(none)
415 + demerphq\100camel.booking.com
416 + demerphq\100hotmail.com
417 doughera doughera\100lafayette.edu
418 + doughera\100lafcol.lafayette.edu
419 + doughera\100fractal.phys.lafayette.edu
420 + doughera.lafayette.edu
421 + doughera\100newton.phys.lafayette.edu
423 gbarr gbarr\100pobox.com
424 + bodg\100tiuk.ti.com
426 + graham.barr\100tiuk.ti.com
427 + gbarr\100monty.mutatus.co.uk
428 gisle gisle\100activestate.com
431 + aas\100bergen.sn.no
432 gsar gsar\100activestate.com
434 + gsar\100engin.umich.edu
435 hv hv\100crypt.compulink.co.uk
439 + jhietaniemi\100gmail.com
441 + jhi\100alpha.hut.fi
444 + jarkko.hietaniemi\100nokia.com
445 + jarkko.hietaniemi\100cc.hut.fi
446 jesse jesse\100bestpractical.com
449 merijn h.m.brand\100xs4all.nl
450 + h.m.brand\100hccnet.nl
451 + merijn\100l1.procura.nl
452 + merijn\100a5.(none)
453 mhx mhx-perl\100gmx.net
455 mst mst\100shadowcat.co.uk
456 + matthewt\100hercule.scsys.co.uk
457 nicholas nick\100unfortu.net
459 + nick\100talking.bollo.cx
460 + nick\100plum.flirble.org
461 + nick\100babyhippo.co.uk
462 + nick\100bagpuss.unfortu.net
463 + nick\100babyhippo.com
464 + nicholas\100dromedary.ams6.corp.booking.com
465 + Nicholas Clark (sans From field in mail header)
466 pudge pudge\100pobox.com
467 rgs rgarciasuarez\100free.fr
468 + rgarciasuarez\100mandrakesoft.com
469 + rgarciasuarez\100mandriva.com
470 + rgarciasuarez\100gmail.com
471 + raphel.garcia-suarez\100hexaflux.com
473 sky sky\100nanisky.com
474 + artur\100contiller.se
475 + arthur\100contiller.se
476 smueller 7k8lrvf02\100sneakemail.com
477 + kjx9zthh3001\100sneakemail.com
478 + dtr8sin02\100sneakemail.com
479 + rt8363b02\100sneakemail.com
480 + o6hhmk002\100sneakemail.com
481 + smueller\100cpan.org
482 + l2ot9pa02\100sneakemail.com
483 + wyp3rlx02\100sneakemail.com
484 + 0mgwtfbbq\100sneakemail.com
485 + xyey9001\100sneakemail.com
486 steveh steve.m.hay\100googlemail.com
487 + stevehay\100planit.com
488 + steve.hay\100uk.radan.com
489 stevep steve\100fisharerojo.org
490 + steve.peters\100gmail.com
491 + root\100dixie.cscaper.com
492 timb Tim.Bunce\100pobox.com
493 + tim.bunce\100ig.co.uk
494 tonyc tony\100develop-help.com
495 + tony\100openbsd32.tony.develop-help.com
500 \043####\100juerd.nl juerd\100cpan.org
501 + juerd\100c3.convolution.nl
502 + juerd\100convolution.nl
503 a.r.ferreira\100gmail.com aferreira\100shopzilla.com
504 abe\100ztreet.demon.nl abeltje\100cpan.org
505 abela\100hsc.fr abela\100geneanet.org
506 abigail\100abigail.be abigail\100foad.org
507 + abigail\100abigail.nl
509 aburt\100isis.cs.du.edu isis!aburt
510 ach\100mpe.mpg.de ach\100rosat.mpe-garching.mpg.de
511 adavies\100ptc.com alex.davies\100talktalk.net
512 ajohnson\100nvidia.com ajohnson\100wischip.com
513 + anders\100broadcom.com
514 alexm\100netli.com alexm\100w-m.ru
515 alex-p5p\100earth.li alex\100rcon.rog
516 alexmv\100mit.edu alex\100chmrr.net
517 alian\100cpan.org alian\100alianwebserver.com
518 allen\100grumman.com allen\100gateway.grumman.com
519 allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
521 allens\100cpan.org easmith\100beatrice.rutgers.edu
522 + root\100dogberry.rutgers.edu
523 andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
524 + andreas.koenig.7os6vvqr\100franz.ak.mind.de
525 + a.koenig\100mind.de
526 + k\100anna.in-berlin.de
528 + koenig\100anna.mind.de
530 + root\100ak-71.mind.de
531 + root\100ak-75.mind.de
532 + k\100sissy.in-berlin.de
533 + a.koenig\100kulturbox.de
534 + k\100sissy.in-berlin.de
535 + root\100dubravka.in-berlin.de
536 anno4000\100lublin.zrz.tu-berlin.de anno4000\100mailbox.tu-berlin.de
537 + siegel\100zrz.tu-berlin.de
538 apocal@cpan.org perl\1000ne.us
539 arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
540 + gatech!skeeve!arnold
541 arodland\100cpan.org andrew\100hbslabs.com
542 arussell\100cs.uml.edu adam\100adam-pc.(none)
543 ash\100cpan.org ash_cpan\100firemirror.com
544 avarab\100gmail.com avar\100cpan.org
546 bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
547 + bailey\100genetics.upenn.edu
548 + bailey.charles\100gmail.com
549 bah\100ecnvantage.com bholzman\100longitude.com
550 barries\100slaysys.com root\100jester.slaysys.com
551 bkedryna\100home.com bart\100cg681574-a.adubn1.nj.home.com
552 bcarter\100gumdrop.flyinganvil.org q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
553 ben_tilly\100operamail.com btilly\100gmail.com
554 + ben_tilly\100hotmail.com
555 ben\100morrow.me.uk mauzo\100csv.warwick.ac.uk
557 bepi\100perl.it enrico.sorcinelli\100gmail.com
558 bert\100alum.mit.edu bert\100genscan.com
559 bigbang7\100gmail.com ddascalescu+github\100gmail.com
560 blgl\100stacken.kth.se blgl\100hagernas.com
561 + 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com
562 brian.d.foy\100gmail.com bdfoy\100cpan.org
563 BQW10602\100nifty.com sadahiro\100cpan.org
564 bulk88\100hotmail.com bulk88
566 chromatic\100wgz.org chromatic\100rmci.net
567 ckuskie\100cadence.com colink\100perldreamer.com
568 claes\100surfar.nu claes\100versed.se
569 clintp\100geeksalad.org cpierce1\100ford.com
570 clkao\100clkao.org clkao\100bestpractical.com
571 corion\100corion.net corion\100cpan.org
572 cp\100onsitetech.com publiustemp-p5p\100yahoo.com
573 + publiustemp-p5p3\100yahoo.com
574 cpan\100audreyt.org autrijus\100egb.elixus.org
575 + autrijus\100geb.elixus.org
576 + autrijus\100gmail.com
577 + autrijus\100ossf.iis.sinica.edu.tw
578 + autrijus\100autrijus.org
579 + audreyt\100audreyt.org
580 cpan\100ton.iguana.be me-01\100ton.iguana.be
581 crt\100kiski.net perl\100ctweten.amsite.com
583 dairiki\100dairiki.org dairiki at dairiki.org
584 dagolden\100cpan.org xdaveg\100gmail.com
585 damian\100conway.org damian\100cs.monash.edu.au
586 dan\100sidhe.org sugalsd\100lbcc.cc.or.us
587 + sugalskd\100osshe.edu
588 daniel\100bitpusher.com daniel\100biz.bitpusher.com
589 david.dyck\100fluke.com dcd\100tc.fluke.com
590 david\100kineticode.com david\100wheeler.com
591 + david\100wheeler.net
592 dennis\100booking.com dennis\100camel.ams6.corp.booking.com
593 + dennis.kaarsemaker\100booking.com
594 + dennis\100kaarsemaker.net
595 dev-perl\100pimb.org knew-p5p\100pimb.org
596 + lists-p5p\100pimb.org
597 djberg86\100attbi.com djberg96\100attbi.com
598 dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org
599 domo\100computer.org shouldbedomo\100mac.com
600 + domo\100slipper.ip.lu
602 dougm\100covalent.net dougm\100opengroup.org
604 dougw\100cpan.org doug_wilson\100intuit.com
605 dwegscheid\100qtm.net wegscd\100whirlpool.com
606 edwardp\100excitehome.net epeschko\100den-mdev1
607 + epeschko\100elmer.tci.com
609 egf7\100columbia.edu efifer\100sanwaint.com
610 eggert\100twinsun.com eggert\100sea.sm.unisys.com
612 fugazi\100zyx.net larrysh\100cpan.org
613 + lshatzer\100islanddata.com
615 gbacon\100itsc.uah.edu gbacon\100adtrn-srv4.adtran.com
616 gerberb\100zenez.com root\100devsys0.zenez.com
617 gfuji\100cpan.org g.psy.va\100gmail.com
618 gerard\100ggoossen.net gerard\100tty.nl
619 gibreel\100pobox.com stephen.zander\100interlock.mckesson.com
621 gnat\100frii.com gnat\100prometheus.frii.com
622 gp\100familiehaase.de gerrit\100familiehaase.de
623 grazz\100pobox.com grazz\100nyc.rr.com
624 gward\100ase.com greg\100bic.mni.mcgill.ca
625 hansmu\100xs4all.nl hansm\100icgroup.nl
629 + hansm\100euronet.nl
631 hio\100ymir.co.jp hio\100hio.jp
632 hops\100sco.com hops\100scoot.pdev.sco.com
634 ian.goodacre\100xtra.co.nz ian\100debian.lan
635 ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
637 james\100mastros.biz theorb\100desert-island.me.uk
638 jand\100activestate.com jan.dubois\100ibm.net
639 japhy\100pobox.com japhy\100pobox.org
640 + japhy\100perlmonk.org
642 + jeffp\100crusoe.net
643 jari.aalto\100poboxes.com jari.aalto\100cante.net
644 jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
645 jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
646 jbuehler\100hekimian.com jhpb\100hekimian.com
647 jcromie\100100divsol.com jcromie\100cpan.org
648 + jim.cromie\100gmail.com
649 jdhedden\100cpan.org jerry\100hedden.us
650 + jdhedden\1001979.usna.com
651 + jdhedden\100gmail.com
652 + jdhedden\100yahoo.com
653 + jhedden\100pn100-02-2-356p.corp.bloomberg.com
654 jeremy\100zawodny.com jzawodn\100wcnet.org
655 jesse\100sig.bsh.com jesse\100ginger
656 jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
657 jfs\100fluent.com jfs\100jfs.fluent.com
658 jhannah\100mutationgrid.com jay\100jays.net
659 + jhannah\100omnihotels.com
660 jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
661 jjore\100cpan.org twists\100gmail.com
662 jkeenan\100cpan.org jkeen\100verizon.net
663 + jkeenan\100dromedary-001.ams6.corp.booking.com
664 jns\100integration-house.com jns\100gellyfish.com
665 + gellyfish\100gellyfish.com
666 john\100atlantech.com john\100titanic.atlantech.com
667 john\100johnwright.org john.wright\100hp.com
668 joseph\100cscaper.com joseph\1005sigma.com
669 joshua\100rodd.us jrodd\100pbs.org
670 jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
671 jpeacock\100messagesystems.com john.peacock\100havurah-software.org
672 + jpeacock\100havurah-software.org
673 + jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
674 + jpeacock\100jpeacock-hp.doesntexist.org
675 + jpeacock\100cpan.org
676 + jpeacock\100rowman.com
677 jql\100accessone.com jql\100jql.accessone.com
678 jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
680 kane\100dwim.org kane\100xs4all.net
685 keith.s.thompson\100gmail.com kst\100mib.org
686 ken\100mathforum.org kenahoo\100gmail.com
687 + ken.williams\100thomsonreuters.com
688 kroepke\100dolphin-services.de kay\100dolphin-services.de
689 kst\100mib.org kst\100cts.com
691 kstar\100wolfetech.com kstar\100cpan.org
692 + kurt_starsinic\100ml.com
693 + kstar\100www.chapin.edu
694 + kstar\100chapin.edu
695 larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
696 + lwall\100netlabs.com
697 + larry\100netlabs.com
699 + lwall\100scalpel.netlabs.com
700 laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
701 + ml1050\100freemail.hu
702 lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
703 + d-lewart\100uiuc.edu
704 lkundrak\100v3.sk lubo.rintel\100gooddata.com
705 lstein\100cshl.org lstein\100formaggio.cshl.org
706 + lstein\100genome.wi.mit.edu
707 lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
708 lutherh\100stratcom.com lutherh\100infinet.com
709 mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
710 marcel\100codewerk.com gr\100univie.ac.at
711 + hanekomu\100gmail.com
712 marcgreen\100cpan.org marcgreen\100wpi.edu
713 markleightonfisher\100gmail.com fisherm\100tce.com
714 mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
715 marnix\100gmail.com pttesac!marnix!vanam
716 marty+p5p\100kasei.com marty\100martian.org
717 mats\100sm6sxl.net mats\100sm5sxl.net
718 mbarbon\100dsi.unive.it mattia.barbon\100libero.it
719 mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
720 me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
721 merijnb\100iloquent.nl merijnb\100ms.com
722 + merijnb\100iloquent.com
723 merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
724 mestre.smash\100gmail.com smash\100cpan.org
725 mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
726 mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
727 michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
728 mike\100stok.co.uk mike\100exegenix.com
729 miyagawa\100bulknews.net miyagawa\100edge.co.jp
730 mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
731 mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
732 moritz\100casella.verplant.org moritz\100faui2k3.org
735 neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
736 neeracher\100mac.com neeri\100iis.ee.ethz.ch
737 neil\100bowers.com neilb\100cre.canon.co.uk
739 nospam-abuse\100bloodgate.com tels\100bloodgate.com
740 + perl_dummy\100bloodgate.com
742 ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
743 + ian\100dial.pipex.com
744 ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
745 ikegami\100adaelis.com eric\100fmdev10.(none)
746 ilmari\100ilmari.org ilmari\100vesla.ilmari.org
747 illpide\100telecel.pt arbor\100al37al08.telecel.pt
748 # see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
750 ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
751 + nospam-abuse\100ilyaz.org
752 + [9]ilya\100math.ohio-state.edu
753 ilya\100martynov.org ilya\100juil.nonet
755 joshua.pritikin\100db.com joshua\100paloalto.com
757 litt\100acm.org tlhackque\100yahoo.com
759 meyering@asic.sc.ti.com jim\100meyering.net
761 okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
762 orwant\100oreilly.com orwant\100media.mit.edu
764 p5-authors\100crystalflame.net perl\100crystalflame.net
765 + rs\100crystalflame.net
766 + coral\100eekeek.org
767 + coral\100moonlight.crystalflame.net
768 + rs\100oregonnet.com
770 paul.green\100stratus.com paul_greenvos\100vos.stratus.com
771 + pgreen\100seussnt.stratus.com
772 paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
773 + paul.marquess\100ntlworld.com
774 + paul.marquess\100openwave.com
775 + pmarquess\100bfsec.bt.co.uk
777 + paul\100paul-desktop.(none)
778 Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
779 pcg\100goof.com schmorp\100schmorp.de
780 perl\100cadop.com cdp\100hpescdp.fc.hp.com
781 perl\100greerga.m-l.org greerga\100m-l.org
782 perl\100profvince.com vince\100profvince.com
783 perl-rt\100wizbit.be p5p\100perl.wizbit.be
784 # Maybe we should special case this to get real names out?
785 Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
786 # NOTE: There is an intentional trailing space in the line above
787 pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
789 rabbit\100rabbit.us rabbit+bugs\100rabbit.us
790 perl\100aaroncrane.co.uk arc\100cpan.org
791 phil\100perkpartners.com phil\100finchcomputer.com
792 pimlott\100idiomtech.com andrew\100pimlott.net
793 + pimlott\100abel.math.harvard.edu
794 pixel\100mandriva.com pixel\100mandrakesoft.com
795 pne\100cpan.org philip.newton\100gmx.net
796 + philip.newton\100datenrevision.de
798 pprymmer\100factset.com pvhp\100forte.com
799 public\100khwilliamson.com khw\100karl.(none)
800 + khw\100khw-desktop.(none)
802 radu\100netsoft.ro rgreab\100fx.ro
803 rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
804 raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
805 module@renee-baecker.de renee.baecker\100smart-websolutions.de
806 + reneeb\100reneeb-desktop.(none)
807 + github@renee-baecker.de
808 + otrs\100ubuntu.(none)
809 + perl\100renee-baecker.de
810 richard.foley\100rfi.net richard.foley\100t-online.de
811 + richard.foley\100ubs.com
812 + richard.foley\100ubsw.com
813 rick\100consumercontact.com rick\100bort.ca
814 + rick.delaney\100rogers.com
816 + rick.delaney\100home.com
817 rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
818 + perl.p5p\100rjbs.manxome.org
819 rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
820 + rjk-perl-p5p\100tamias.net
822 rjray\100redhat.com rjray\100uswest.com
823 rmgiroux\100acm.org rmgiroux\100hotmail.com
824 + mgiroux\100bear.com
825 rmbarker\100cpan.org rmb1\100cise.npl.co.uk
826 + robin.barker\100npl.co.uk
827 + rmb\100cise.npl.co.uk
828 + robin\100spade-ubuntu.(none)
829 + r.m.barker\100btinternet.com
830 + rmbarker.cpan\100btinternet.com
831 robertmay\100cpan.org rob\100themayfamily.me.uk
832 roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
833 robin\100cpan.org robin\100kitsite.com
834 roderick\100argon.org roderick\100gate.net
835 + roderick\100ibcinc.com
836 argrath\100ub32.org root\100ub32.org
837 rootbeer\100teleport.com rootbeer\100redcat.com
838 + tomphoenix\100unknown
839 rurban\100x-ray.at rurban\100cpan.org
840 + rurban\100cpanel.net
841 sartak\100bestpractical.com sartak\100gmail.com
843 sadinoff\100olf.com danny-cpan\100sadinoff.com
844 schubiger\100cpan.org steven\100accognoscere.org
845 + sts\100accognoscere.org
846 + schubiger\100gmail.com
848 schwern\100pobox.com schwern\100gmail.com
849 + schwern\100athens.arena-i.com
850 + schwern\100blackrider.aocn.com
851 + schwern\100ool-18b93024.dyn.optonline.net
852 scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
854 schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
855 + schwab\100ls5.informatik.uni-dortmund.de
856 sebastien\100aperghis.net maddingue\100free.fr
858 shigeya\100wide.ad.jp shigeya\100foretune.co.jp
859 shlomif\100cpan.org shlomif\100vipe.technion.ac.il
860 + shlomif\100iglu.org.il
861 + shlomif+processed-by-perl\100gmail.com
862 + shlomif\100shlomifish.org
863 simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
864 + simon\100brecon.co.uk
865 + simon\100othersideofthe.earth.li
866 + simon\100cozens.net
867 + simon\100netthink.co.uk
868 lannings\100who.int lannings\100gmail.com
869 + slanning\100cpan.org
870 slaven\100rezic.de slaven.rezic\100berlin.de
871 + srezic\100iconmobile.com
873 + eserte\100cs.tu-berlin.de
874 + eserte\100vran.herceg.de
875 smcc\100mit.edu smcc\100ocf.berkeley.edu
876 + smcc\100csua.berkeley.edu
878 + smccam\100uclink4.berkeley.edu
879 spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
880 + spider\100leggy.zk3.dec.com
881 + spider-perl\100orb.nashua.nh.us
882 + spider\100peano.zk3.dec.com
883 + spider.boardman\100orb.nashua.nh.us>
885 + spider.boardman\100orb.nashua.nh.us
886 + root\100peano.zk3.dec.com
887 spiros\100lokku.com s.denaxas\100gmail.com
888 spp\100ds.net spp\100psa.pencom.com
889 + spp\100psasolar.colltech.com
890 + spp\100spotter.yi.org
891 stef\100mongueurs.net stef\100payrard.net
892 + s.payrard\100wanadoo.fr
893 + properler\100freesurf.fr
894 + stef\100francenet.fr
895 sthoenna\100efn.org ysth\100raven.shiftboard.com
896 sisyphus1\100optusnet.com.au sisyphus\100cpan.org
898 tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
899 tchrist\100perl.com tchrist\100mox.perl.com
900 + tchrist\100jhereg.perl.com
901 thomas.dorner\100start.de tdorner\100amadeus.net
902 tjenness\100cpan.org t.jenness\100jach.hawaii.edu
903 + timj\100jach.hawaii.edu
904 tobez\100tobez.org tobez\100plab.ku.dk
905 toddr\100cpanel.net toddr\100cpan.org
906 tom\100compton.nu thh\100cyberscience.com
907 tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
908 + tom\100amber.ssd.hcsc.com
910 vkonovalov\100lucent.com vkonovalov\100peterstar.ru
911 + konovalo\100mail.wplus.net
912 + vadim\100vkonovalov.ru
913 + vkonovalov\100spb.lucent.com
914 + vkonovalov\100alcatel-lucent.com
915 + vadim.konovalov\100alcatel-lucent.com
917 whatever\100davidnicol.com davidnicol\100gmail.com
918 wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
919 + wolfgang.laun\100thalesgroup.com
920 + wolfgang.laun\100gmail.com
921 wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
922 yath\100yath.de yath-perlbug\100yath.de