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