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