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\100procura.nl
457 + merijn.brand\100procura.nl
458 + h.m.brand\100hccnet.nl
459 + merijn\100l1.procura.nl
460 + merijn\100a5.(none)
461 mhx mhx-perl\100gmx.net
463 mst mst\100shadowcat.co.uk
464 + matthewt\100hercule.scsys.co.uk
465 nicholas nick\100unfortu.net
467 + nick\100talking.bollo.cx
468 + nick\100plum.flirble.org
469 + nick\100babyhippo.co.uk
470 + nick\100bagpuss.unfortu.net
471 + nick\100babyhippo.com
472 + nicholas\100dromedary.ams6.corp.booking.com
473 + Nicholas Clark (sans From field in mail header)
474 pudge pudge\100pobox.com
475 rgs rgarciasuarez\100free.fr
476 + rgarciasuarez\100mandrakesoft.com
477 + rgarciasuarez\100mandriva.com
478 + rgarciasuarez\100gmail.com
479 + raphel.garcia-suarez\100hexaflux.com
481 sky sky\100nanisky.com
482 + artur\100contiller.se
483 + arthur\100contiller.se
484 smueller 7k8lrvf02\100sneakemail.com
485 + kjx9zthh3001\100sneakemail.com
486 + dtr8sin02\100sneakemail.com
487 + rt8363b02\100sneakemail.com
488 + o6hhmk002\100sneakemail.com
489 + smueller\100cpan.org
490 + l2ot9pa02\100sneakemail.com
491 + wyp3rlx02\100sneakemail.com
492 + 0mgwtfbbq\100sneakemail.com
493 + xyey9001\100sneakemail.com
494 steveh steve.m.hay\100googlemail.com
495 + stevehay\100planit.com
496 + steve.hay\100uk.radan.com
497 stevep steve\100fisharerojo.org
498 + steve.peters\100gmail.com
499 + root\100dixie.cscaper.com
500 timb Tim.Bunce\100pobox.com
501 + tim.bunce\100ig.co.uk
502 tonyc tony\100develop-help.com
503 + tony\100openbsd32.tony.develop-help.com
504 + tony\100saturn.(none)
509 \043####\100juerd.nl juerd\100cpan.org
510 + juerd\100c3.convolution.nl
511 + juerd\100convolution.nl
512 a.r.ferreira\100gmail.com aferreira\100shopzilla.com
513 abe\100ztreet.demon.nl abeltje\100cpan.org
514 abela\100hsc.fr abela\100geneanet.org
515 abigail\100abigail.be abigail\100foad.org
516 + abigail\100abigail.nl
518 aburt\100isis.cs.du.edu isis!aburt
519 ach\100mpe.mpg.de ach\100rosat.mpe-garching.mpg.de
520 adavies\100ptc.com alex.davies\100talktalk.net
521 ajohnson\100nvidia.com ajohnson\100wischip.com
522 + anders\100broadcom.com
523 alexm\100netli.com alexm\100w-m.ru
524 alex-p5p\100earth.li alex\100rcon.rog
525 alexmv\100mit.edu alex\100chmrr.net
526 alian\100cpan.org alian\100alianwebserver.com
527 allen\100grumman.com allen\100gateway.grumman.com
528 allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
530 allens\100cpan.org easmith\100beatrice.rutgers.edu
531 + root\100dogberry.rutgers.edu
532 ambs\100cpan.org hashashin\100gmail.com
533 andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
534 + andreas.koenig.7os6vvqr\100franz.ak.mind.de
535 + a.koenig\100mind.de
536 + k\100anna.in-berlin.de
538 + koenig\100anna.mind.de
540 + root\100ak-71.mind.de
541 + root\100ak-75.mind.de
542 + k\100sissy.in-berlin.de
543 + a.koenig\100kulturbox.de
544 + k\100sissy.in-berlin.de
545 + root\100dubravka.in-berlin.de
546 anno4000\100lublin.zrz.tu-berlin.de anno4000\100mailbox.tu-berlin.de
547 + siegel\100zrz.tu-berlin.de
548 apocal@cpan.org perl\1000ne.us
549 arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
550 + gatech!skeeve!arnold
551 arodland\100cpan.org andrew\100hbslabs.com
552 arussell\100cs.uml.edu adam\100adam-pc.(none)
553 ash\100cpan.org ash_cpan\100firemirror.com
554 avarab\100gmail.com avar\100cpan.org
556 bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
557 + bailey\100genetics.upenn.edu
558 + bailey.charles\100gmail.com
559 bah\100ecnvantage.com bholzman\100longitude.com
560 barries\100slaysys.com root\100jester.slaysys.com
561 bkedryna\100home.com bart\100cg681574-a.adubn1.nj.home.com
562 bcarter\100gumdrop.flyinganvil.org q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
563 ben_tilly\100operamail.com btilly\100gmail.com
564 + ben_tilly\100hotmail.com
565 ben\100morrow.me.uk mauzo\100csv.warwick.ac.uk
567 bepi\100perl.it enrico.sorcinelli\100gmail.com
568 bert\100alum.mit.edu bert\100genscan.com
569 bigbang7\100gmail.com ddascalescu+github\100gmail.com
570 blgl\100stacken.kth.se blgl\100hagernas.com
571 + 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com
572 brian.d.foy\100gmail.com bdfoy\100cpan.org
573 BQW10602\100nifty.com sadahiro\100cpan.org
574 bulk88\100hotmail.com bulk88
576 chad.granum\100dreamhost.com exodist7\100gmail.com
577 choroba\100cpan.org choroba\100weed.(none)
578 chromatic\100wgz.org chromatic\100rmci.net
579 ckuskie\100cadence.com colink\100perldreamer.com
580 claes\100surfar.nu claes\100versed.se
581 clintp\100geeksalad.org cpierce1\100ford.com
582 clkao\100clkao.org clkao\100bestpractical.com
583 corion\100corion.net corion\100cpan.org
584 cp\100onsitetech.com publiustemp-p5p\100yahoo.com
585 + publiustemp-p5p3\100yahoo.com
586 cpan\100audreyt.org autrijus\100egb.elixus.org
587 + autrijus\100geb.elixus.org
588 + autrijus\100gmail.com
589 + autrijus\100ossf.iis.sinica.edu.tw
590 + autrijus\100autrijus.org
591 + audreyt\100audreyt.org
592 cpan\100ton.iguana.be me-01\100ton.iguana.be
593 crt\100kiski.net perl\100ctweten.amsite.com
595 dairiki\100dairiki.org dairiki at dairiki.org
596 dagolden\100cpan.org xdaveg\100gmail.com
598 damian\100conway.org damian\100cs.monash.edu.au
599 dan\100sidhe.org sugalsd\100lbcc.cc.or.us
600 + sugalskd\100osshe.edu
601 daniel\100bitpusher.com daniel\100biz.bitpusher.com
602 dave\100mag-sol.com dave\100dave.org.uk
603 david.dyck\100fluke.com dcd\100tc.fluke.com
604 david\100justatheory.com david\100wheeler.net
605 + david\100kineticode.com
606 + david\100wheeler.com
607 + david\100wheeler.net
608 whatever\100davidnicol.com davidnicol\100gmail.com
609 dennis\100booking.com dennis\100camel.ams6.corp.booking.com
610 + dennis.kaarsemaker\100booking.com
611 + dennis\100kaarsemaker.net
612 dev-perl\100pimb.org knew-p5p\100pimb.org
613 + lists-p5p\100pimb.org
614 djberg86\100attbi.com djberg96\100attbi.com
615 dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org
616 dom\100earth.li dom\100semmle.com
617 domo\100computer.org shouldbedomo\100mac.com
618 + domo\100slipper.ip.lu
620 dougm\100covalent.net dougm\100opengroup.org
622 dougw\100cpan.org doug_wilson\100intuit.com
623 dwegscheid\100qtm.net wegscd\100whirlpool.com
624 edwardp\100excitehome.net epeschko\100den-mdev1
625 + epeschko\100elmer.tci.com
627 egf7\100columbia.edu efifer\100sanwaint.com
628 eggert\100twinsun.com eggert\100sea.sm.unisys.com
629 etj\100cpan.org mohawk2\100users.noreply.github.com
631 fugazi\100zyx.net larrysh\100cpan.org
632 + lshatzer\100islanddata.com
634 gbacon\100itsc.uah.edu gbacon\100adtrn-srv4.adtran.com
635 gerberb\100zenez.com root\100devsys0.zenez.com
636 gfuji\100cpan.org g.psy.va\100gmail.com
637 genesullivan50\100yahoo.com gsullivan\100cpan.org
638 gerard\100ggoossen.net gerard\100tty.nl
639 gibreel\100pobox.com stephen.zander\100interlock.mckesson.com
641 gideon\100cpan.org gidisrael\100gmail.com
642 gnat\100frii.com gnat\100prometheus.frii.com
643 gp\100familiehaase.de gerrit\100familiehaase.de
644 grazz\100pobox.com grazz\100nyc.rr.com
645 gward\100ase.com greg\100bic.mni.mcgill.ca
646 haggai\100cpan.org alanhaggai\100alanhaggai.org
647 + alanhaggai\100gmail.com
648 hansmu\100xs4all.nl hansm\100icgroup.nl
652 + hansm\100euronet.nl
654 hio\100ymir.co.jp hio\100hio.jp
655 hops\100sco.com hops\100scoot.pdev.sco.com
657 ian.goodacre\100xtra.co.nz ian\100debian.lan
658 ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
660 james\100mastros.biz theorb\100desert-island.me.uk
661 jan\100jandubois.com jand\100activestate.com
662 + jan.dubois\100ibm.net
663 japhy\100pobox.com japhy\100pobox.org
664 + japhy\100perlmonk.org
666 + jeffp\100crusoe.net
667 jari.aalto\100poboxes.com jari.aalto\100cante.net
668 jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
669 jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
670 jbuehler\100hekimian.com jhpb\100hekimian.com
671 jcromie\100100divsol.com jcromie\100cpan.org
672 + jim.cromie\100gmail.com
673 jd\100cpanel.net lightsey\100debian.org
674 jdhedden\100cpan.org jerry\100hedden.us
675 + jdhedden\1001979.usna.com
676 + jdhedden\100gmail.com
677 + jdhedden\100yahoo.com
678 + jhedden\100pn100-02-2-356p.corp.bloomberg.com
679 + jdhedden\100solydxk
680 jeremy\100zawodny.com jzawodn\100wcnet.org
681 jesse\100sig.bsh.com jesse\100ginger
682 jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
683 jfs\100fluent.com jfs\100jfs.fluent.com
684 jhannah\100mutationgrid.com jay\100jays.net
685 + jhannah\100omnihotels.com
686 jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
687 jjore\100cpan.org twists\100gmail.com
688 jkeenan\100cpan.org jkeen\100verizon.net
689 + jkeenan\100dromedary-001.ams6.corp.booking.com
690 jns\100integration-house.com jns\100gellyfish.com
691 + gellyfish\100gellyfish.com
692 john\100atlantech.com john\100titanic.atlantech.com
693 john\100johnwright.org john.wright\100hp.com
694 joseph\100cscaper.com joseph\1005sigma.com
695 joshua\100rodd.us jrodd\100pbs.org
696 jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
697 jpeacock\100messagesystems.com john.peacock\100havurah-software.org
698 + jpeacock\100havurah-software.org
699 + jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
700 + jpeacock\100jpeacock-hp.doesntexist.org
701 + jpeacock\100cpan.org
702 + jpeacock\100rowman.com
703 james.schneider\100db.com jschneid\100netilla.com
704 jpl.jpl\100gmail.com jpl\100research.att.com
705 jql\100accessone.com jql\100jql.accessone.com
706 jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
708 kane\100dwim.org kane\100xs4all.net
713 keith.s.thompson\100gmail.com kst\100mib.org
714 ken\100mathforum.org kenahoo\100gmail.com
715 + ken.williams\100thomsonreuters.com
716 kentfredric\100gmail.com kentnl\100cpan.org
717 kmx\100volny.cz kmx\100volny.cz
719 kroepke\100dolphin-services.de kay\100dolphin-services.de
720 kst\100mib.org kst\100cts.com
722 kstar\100wolfetech.com kstar\100cpan.org
723 + kurt_starsinic\100ml.com
724 + kstar\100www.chapin.edu
725 + kstar\100chapin.edu
726 larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
727 + lwall\100netlabs.com
728 + larry\100netlabs.com
730 + lwall\100scalpel.netlabs.com
731 laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
732 + ml1050\100freemail.hu
733 lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
734 + d-lewart\100uiuc.edu
735 lkundrak\100v3.sk lubo.rintel\100gooddata.com
736 lstein\100cshl.org lstein\100formaggio.cshl.org
737 + lstein\100genome.wi.mit.edu
738 l.mai\100web.de plokinom\100gmail.com
739 lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
740 lutherh\100stratcom.com lutherh\100infinet.com
741 mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
742 marcel\100codewerk.com gr\100univie.ac.at
743 + hanekomu\100gmail.com
744 marcgreen\100cpan.org marcgreen\100wpi.edu
745 markleightonfisher\100gmail.com fisherm\100tce.com
746 + mark-fisher\100mindspring.com
747 mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
748 marnix\100gmail.com pttesac!marnix!vanam
749 marty+p5p\100kasei.com marty\100martian.org
750 mats\100sm6sxl.net mats\100sm5sxl.net
751 mbarbon\100dsi.unive.it mattia.barbon\100libero.it
752 + mattia\100barbon.org
753 mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
754 me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
755 merijnb\100iloquent.nl merijnb\100ms.com
756 + merijnb\100iloquent.com
757 merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
758 mestre.smash\100gmail.com smash\100cpan.org
759 mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
760 mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
761 michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
762 mike\100stok.co.uk mike\100exegenix.com
763 miyagawa\100bulknews.net miyagawa\100edge.co.jp
764 mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
765 mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
766 moritz\100casella.verplant.org moritz\100faui2k3.org
769 neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
770 neeracher\100mac.com neeri\100iis.ee.ethz.ch
771 neil\100bowers.com neilb\100cre.canon.co.uk
773 nospam-abuse\100bloodgate.com tels\100bloodgate.com
774 + perl_dummy\100bloodgate.com
776 ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
777 + ian\100dial.pipex.com
778 ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
779 ikegami\100adaelis.com eric\100fmdev10.(none)
780 ilmari\100ilmari.org ilmari\100vesla.ilmari.org
781 illpide\100telecel.pt arbor\100al37al08.telecel.pt
782 # see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
784 ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
785 + nospam-abuse\100ilyaz.org
786 + [9]ilya\100math.ohio-state.edu
787 ilya\100martynov.org ilya\100juil.nonet
789 joshua.pritikin\100db.com joshua\100paloalto.com
791 litt\100acm.org tlhackque\100yahoo.com
793 meyering@asic.sc.ti.com jim\100meyering.net
795 okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
796 orwant\100oreilly.com orwant\100media.mit.edu
798 p5-authors\100crystalflame.net perl\100crystalflame.net
799 + rs\100crystalflame.net
800 + coral\100eekeek.org
801 + coral\100moonlight.crystalflame.net
802 + rs\100oregonnet.com
804 paul.green\100stratus.com paul_greenvos\100vos.stratus.com
805 + pgreen\100seussnt.stratus.com
806 paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
807 + paul.marquess\100ntlworld.com
808 + paul.marquess\100openwave.com
809 + pmarquess\100bfsec.bt.co.uk
811 + paul\100paul-desktop.(none)
812 Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
813 pcg\100goof.com schmorp\100schmorp.de
814 perl\100cadop.com cdp\100hpescdp.fc.hp.com
815 perl\100greerga.m-l.org greerga\100m-l.org
816 perl\100profvince.com vince\100profvince.com
817 perl-rt\100wizbit.be p5p\100perl.wizbit.be
818 # Maybe we should special case this to get real names out?
819 Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
820 # NOTE: There is an intentional trailing space in the line above
821 pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
823 ribasushi@cpan.org rabbit\100rabbit.us
824 + rabbit+bugs\100rabbit.us
825 perl\100aaroncrane.co.uk arc\100cpan.org
826 phil\100perkpartners.com phil\100finchcomputer.com
827 pimlott\100idiomtech.com andrew\100pimlott.net
828 + pimlott\100abel.math.harvard.edu
829 pixel\100mandriva.com pixel\100mandrakesoft.com
830 pne\100cpan.org philip.newton\100gmx.net
831 + philip.newton\100datenrevision.de
833 pprymmer\100factset.com pvhp\100forte.com
834 khw\100cpan.org khw\100karl.(none)
835 + public\100khwilliamson.com
836 + khw\100khw-desktop.(none)
838 radu\100netsoft.ro rgreab\100fx.ro
839 rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
840 raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
841 module@renee-baecker.de renee.baecker\100smart-websolutions.de
842 + reneeb\100reneeb-desktop.(none)
843 + github@renee-baecker.de
844 + otrs\100ubuntu.(none)
845 + perl\100renee-baecker.de
846 + reb\100perl-services.de
847 + info\100perl-services.de
848 richard.foley\100rfi.net richard.foley\100t-online.de
849 + richard.foley\100ubs.com
850 + richard.foley\100ubsw.com
851 rick\100consumercontact.com rick\100bort.ca
852 + rick.delaney\100rogers.com
854 + rick.delaney\100home.com
855 rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
856 + perl.p5p\100rjbs.manxome.org
857 rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
858 + rjk-perl-p5p\100tamias.net
860 rjray\100redhat.com rjray\100uswest.com
861 rmgiroux\100acm.org rmgiroux\100hotmail.com
862 + mgiroux\100bear.com
863 rmbarker\100cpan.org rmb1\100cise.npl.co.uk
864 + robin.barker\100npl.co.uk
865 + rmb\100cise.npl.co.uk
866 + robin\100spade-ubuntu.(none)
867 + r.m.barker\100btinternet.com
868 + rmbarker.cpan\100btinternet.com
869 robertmay\100cpan.org rob\100themayfamily.me.uk
870 roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
871 robin\100cpan.org robin\100kitsite.com
872 roderick\100argon.org roderick\100gate.net
873 + roderick\100ibcinc.com
874 argrath\100ub32.org root\100ub32.org
875 rootbeer\100teleport.com rootbeer\100redcat.com
876 + tomphoenix\100unknown
877 rurban\100x-ray.at rurban\100cpan.org
878 + rurban\100cpanel.net
879 rvtol+news\100isolution.nl rvtol\100isolution.nl
880 sartak\100bestpractical.com sartak\100gmail.com
882 sadinoff\100olf.com danny-cpan\100sadinoff.com
883 schubiger\100cpan.org steven\100accognoscere.org
884 + sts\100accognoscere.org
885 + schubiger\100gmail.com
887 schwern\100pobox.com schwern\100gmail.com
888 + schwern\100athens.arena-i.com
889 + schwern\100blackrider.aocn.com
890 + schwern\100ool-18b93024.dyn.optonline.net
891 scop\100cs132170.pp.htv.fi ville.skytta\100iki.fi
892 scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
894 schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
895 + schwab\100ls5.informatik.uni-dortmund.de
896 sebastien\100aperghis.net maddingue\100free.fr
898 shigeya\100wide.ad.jp shigeya\100foretune.co.jp
899 shlomif\100cpan.org shlomif\100vipe.technion.ac.il
900 + shlomif\100iglu.org.il
901 + shlomif+processed-by-perl\100gmail.com
902 + shlomif\100shlomifish.org
903 simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
904 + simon\100brecon.co.uk
905 + simon\100othersideofthe.earth.li
906 + simon\100cozens.net
907 + simon\100netthink.co.uk
908 sisyphus\100cpan.org sisyphus1\100optusnet.com.au
909 + sisyphus359\100gmail.com
910 lannings\100who.int lannings\100gmail.com
911 + slanning\100cpan.org
912 slaven\100rezic.de slaven.rezic\100berlin.de
913 + srezic\100iconmobile.com
915 + eserte\100cs.tu-berlin.de
916 + eserte\100vran.herceg.de
917 smcc\100mit.edu smcc\100ocf.berkeley.edu
918 + smcc\100csua.berkeley.edu
920 + smccam\100uclink4.berkeley.edu
921 spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
922 + spider\100leggy.zk3.dec.com
923 + spider-perl\100orb.nashua.nh.us
924 + spider\100peano.zk3.dec.com
925 + spider.boardman\100orb.nashua.nh.us>
927 + spider.boardman\100orb.nashua.nh.us
928 + root\100peano.zk3.dec.com
929 spiros\100lokku.com s.denaxas\100gmail.com
930 spp\100ds.net spp\100psa.pencom.com
931 + spp\100psasolar.colltech.com
932 + spp\100spotter.yi.org
933 stef\100mongueurs.net stef\100payrard.net
934 + s.payrard\100wanadoo.fr
935 + properler\100freesurf.fr
936 + stef\100francenet.fr
937 stevan\100cpan.org stevan.little\100gmail.com
938 + stevan.little\100iinteractive.com
939 sthoenna\100efn.org ysth\100raven.shiftboard.com
941 tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
942 tchrist\100perl.com tchrist\100mox.perl.com
943 + tchrist\100jhereg.perl.com
944 thomas.dorner\100start.de tdorner\100amadeus.net
945 tjenness\100cpan.org t.jenness\100jach.hawaii.edu
946 + timj\100jach.hawaii.edu
947 tobez\100tobez.org tobez\100plab.ku.dk
948 toddr\100cpan.org toddr\100cpanel.net
949 tom\100compton.nu thh\100cyberscience.com
950 tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
951 + tom\100amber.ssd.hcsc.com
953 vkonovalov\100lucent.com vkonovalov\100peterstar.ru
954 + konovalo\100mail.wplus.net
955 + vadim\100vkonovalov.ru
956 + vkonovalov\100spb.lucent.com
957 + vkonovalov\100alcatel-lucent.com
958 + vadim.konovalov\100alcatel-lucent.com
960 whatever\100davidnicol.com davidnicol\100gmail.com
961 wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
962 + wolfgang.laun\100thalesgroup.com
963 + wolfgang.laun\100gmail.com
964 wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
965 yath\100yath.de yath-perlbug\100yath.de