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