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 haggai\100cpan.org alanhaggai\100alanhaggai.org
628 + alanhaggai\100gmail.com
629 hansmu\100xs4all.nl hansm\100icgroup.nl
633 + hansm\100euronet.nl
635 hio\100ymir.co.jp hio\100hio.jp
636 hops\100sco.com hops\100scoot.pdev.sco.com
638 ian.goodacre\100xtra.co.nz ian\100debian.lan
639 ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
641 james\100mastros.biz theorb\100desert-island.me.uk
642 jand\100activestate.com jan.dubois\100ibm.net
643 japhy\100pobox.com japhy\100pobox.org
644 + japhy\100perlmonk.org
646 + jeffp\100crusoe.net
647 jari.aalto\100poboxes.com jari.aalto\100cante.net
648 jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
649 jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
650 jbuehler\100hekimian.com jhpb\100hekimian.com
651 jcromie\100100divsol.com jcromie\100cpan.org
652 + jim.cromie\100gmail.com
653 jdhedden\100cpan.org jerry\100hedden.us
654 + jdhedden\1001979.usna.com
655 + jdhedden\100gmail.com
656 + jdhedden\100yahoo.com
657 + jhedden\100pn100-02-2-356p.corp.bloomberg.com
658 jeremy\100zawodny.com jzawodn\100wcnet.org
659 jesse\100sig.bsh.com jesse\100ginger
660 jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
661 jfs\100fluent.com jfs\100jfs.fluent.com
662 jhannah\100mutationgrid.com jay\100jays.net
663 + jhannah\100omnihotels.com
664 jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
665 jjore\100cpan.org twists\100gmail.com
666 jkeenan\100cpan.org jkeen\100verizon.net
667 + jkeenan\100dromedary-001.ams6.corp.booking.com
668 jns\100integration-house.com jns\100gellyfish.com
669 + gellyfish\100gellyfish.com
670 john\100atlantech.com john\100titanic.atlantech.com
671 john\100johnwright.org john.wright\100hp.com
672 joseph\100cscaper.com joseph\1005sigma.com
673 joshua\100rodd.us jrodd\100pbs.org
674 jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
675 jpeacock\100messagesystems.com john.peacock\100havurah-software.org
676 + jpeacock\100havurah-software.org
677 + jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
678 + jpeacock\100jpeacock-hp.doesntexist.org
679 + jpeacock\100cpan.org
680 + jpeacock\100rowman.com
681 jpl.jpl\100gmail.com jpl\100research.att.com
682 jql\100accessone.com jql\100jql.accessone.com
683 jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
685 kane\100dwim.org kane\100xs4all.net
690 keith.s.thompson\100gmail.com kst\100mib.org
691 ken\100mathforum.org kenahoo\100gmail.com
692 + ken.williams\100thomsonreuters.com
693 kentfredric\100gmail.com kentnl\100cpan.org
694 kroepke\100dolphin-services.de kay\100dolphin-services.de
695 kst\100mib.org kst\100cts.com
697 kstar\100wolfetech.com kstar\100cpan.org
698 + kurt_starsinic\100ml.com
699 + kstar\100www.chapin.edu
700 + kstar\100chapin.edu
701 larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
702 + lwall\100netlabs.com
703 + larry\100netlabs.com
705 + lwall\100scalpel.netlabs.com
706 laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
707 + ml1050\100freemail.hu
708 lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
709 + d-lewart\100uiuc.edu
710 lkundrak\100v3.sk lubo.rintel\100gooddata.com
711 lstein\100cshl.org lstein\100formaggio.cshl.org
712 + lstein\100genome.wi.mit.edu
713 lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
714 lutherh\100stratcom.com lutherh\100infinet.com
715 mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
716 marcel\100codewerk.com gr\100univie.ac.at
717 + hanekomu\100gmail.com
718 marcgreen\100cpan.org marcgreen\100wpi.edu
719 markleightonfisher\100gmail.com fisherm\100tce.com
720 mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
721 marnix\100gmail.com pttesac!marnix!vanam
722 marty+p5p\100kasei.com marty\100martian.org
723 mats\100sm6sxl.net mats\100sm5sxl.net
724 mbarbon\100dsi.unive.it mattia.barbon\100libero.it
725 mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
726 me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
727 merijnb\100iloquent.nl merijnb\100ms.com
728 + merijnb\100iloquent.com
729 merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
730 mestre.smash\100gmail.com smash\100cpan.org
731 mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
732 mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
733 michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
734 mike\100stok.co.uk mike\100exegenix.com
735 miyagawa\100bulknews.net miyagawa\100edge.co.jp
736 mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
737 mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
738 moritz\100casella.verplant.org moritz\100faui2k3.org
741 neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
742 neeracher\100mac.com neeri\100iis.ee.ethz.ch
743 neil\100bowers.com neilb\100cre.canon.co.uk
745 nospam-abuse\100bloodgate.com tels\100bloodgate.com
746 + perl_dummy\100bloodgate.com
748 ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
749 + ian\100dial.pipex.com
750 ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
751 ikegami\100adaelis.com eric\100fmdev10.(none)
752 ilmari\100ilmari.org ilmari\100vesla.ilmari.org
753 illpide\100telecel.pt arbor\100al37al08.telecel.pt
754 # see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
756 ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
757 + nospam-abuse\100ilyaz.org
758 + [9]ilya\100math.ohio-state.edu
759 ilya\100martynov.org ilya\100juil.nonet
761 joshua.pritikin\100db.com joshua\100paloalto.com
763 litt\100acm.org tlhackque\100yahoo.com
765 meyering@asic.sc.ti.com jim\100meyering.net
767 okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
768 orwant\100oreilly.com orwant\100media.mit.edu
770 p5-authors\100crystalflame.net perl\100crystalflame.net
771 + rs\100crystalflame.net
772 + coral\100eekeek.org
773 + coral\100moonlight.crystalflame.net
774 + rs\100oregonnet.com
776 paul.green\100stratus.com paul_greenvos\100vos.stratus.com
777 + pgreen\100seussnt.stratus.com
778 paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
779 + paul.marquess\100ntlworld.com
780 + paul.marquess\100openwave.com
781 + pmarquess\100bfsec.bt.co.uk
783 + paul\100paul-desktop.(none)
784 Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
785 pcg\100goof.com schmorp\100schmorp.de
786 perl\100cadop.com cdp\100hpescdp.fc.hp.com
787 perl\100greerga.m-l.org greerga\100m-l.org
788 perl\100profvince.com vince\100profvince.com
789 perl-rt\100wizbit.be p5p\100perl.wizbit.be
790 # Maybe we should special case this to get real names out?
791 Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
792 # NOTE: There is an intentional trailing space in the line above
793 pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
795 ribasushi@cpan.org rabbit\100rabbit.us
796 + rabbit+bugs\100rabbit.us
797 perl\100aaroncrane.co.uk arc\100cpan.org
798 phil\100perkpartners.com phil\100finchcomputer.com
799 pimlott\100idiomtech.com andrew\100pimlott.net
800 + pimlott\100abel.math.harvard.edu
801 pixel\100mandriva.com pixel\100mandrakesoft.com
802 pne\100cpan.org philip.newton\100gmx.net
803 + philip.newton\100datenrevision.de
805 pprymmer\100factset.com pvhp\100forte.com
806 khw\100cpan.org khw\100karl.(none)
807 + public\100khwilliamson.com
808 + khw\100khw-desktop.(none)
810 radu\100netsoft.ro rgreab\100fx.ro
811 rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
812 raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
813 module@renee-baecker.de renee.baecker\100smart-websolutions.de
814 + reneeb\100reneeb-desktop.(none)
815 + github@renee-baecker.de
816 + otrs\100ubuntu.(none)
817 + perl\100renee-baecker.de
818 richard.foley\100rfi.net richard.foley\100t-online.de
819 + richard.foley\100ubs.com
820 + richard.foley\100ubsw.com
821 rick\100consumercontact.com rick\100bort.ca
822 + rick.delaney\100rogers.com
824 + rick.delaney\100home.com
825 rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
826 + perl.p5p\100rjbs.manxome.org
827 rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
828 + rjk-perl-p5p\100tamias.net
830 rjray\100redhat.com rjray\100uswest.com
831 rmgiroux\100acm.org rmgiroux\100hotmail.com
832 + mgiroux\100bear.com
833 rmbarker\100cpan.org rmb1\100cise.npl.co.uk
834 + robin.barker\100npl.co.uk
835 + rmb\100cise.npl.co.uk
836 + robin\100spade-ubuntu.(none)
837 + r.m.barker\100btinternet.com
838 + rmbarker.cpan\100btinternet.com
839 robertmay\100cpan.org rob\100themayfamily.me.uk
840 roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
841 robin\100cpan.org robin\100kitsite.com
842 roderick\100argon.org roderick\100gate.net
843 + roderick\100ibcinc.com
844 argrath\100ub32.org root\100ub32.org
845 rootbeer\100teleport.com rootbeer\100redcat.com
846 + tomphoenix\100unknown
847 rurban\100x-ray.at rurban\100cpan.org
848 + rurban\100cpanel.net
849 sartak\100bestpractical.com sartak\100gmail.com
851 sadinoff\100olf.com danny-cpan\100sadinoff.com
852 schubiger\100cpan.org steven\100accognoscere.org
853 + sts\100accognoscere.org
854 + schubiger\100gmail.com
856 schwern\100pobox.com schwern\100gmail.com
857 + schwern\100athens.arena-i.com
858 + schwern\100blackrider.aocn.com
859 + schwern\100ool-18b93024.dyn.optonline.net
860 scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
862 schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
863 + schwab\100ls5.informatik.uni-dortmund.de
864 sebastien\100aperghis.net maddingue\100free.fr
866 shigeya\100wide.ad.jp shigeya\100foretune.co.jp
867 shlomif\100cpan.org shlomif\100vipe.technion.ac.il
868 + shlomif\100iglu.org.il
869 + shlomif+processed-by-perl\100gmail.com
870 + shlomif\100shlomifish.org
871 simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
872 + simon\100brecon.co.uk
873 + simon\100othersideofthe.earth.li
874 + simon\100cozens.net
875 + simon\100netthink.co.uk
876 lannings\100who.int lannings\100gmail.com
877 + slanning\100cpan.org
878 slaven\100rezic.de slaven.rezic\100berlin.de
879 + srezic\100iconmobile.com
881 + eserte\100cs.tu-berlin.de
882 + eserte\100vran.herceg.de
883 smcc\100mit.edu smcc\100ocf.berkeley.edu
884 + smcc\100csua.berkeley.edu
886 + smccam\100uclink4.berkeley.edu
887 spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
888 + spider\100leggy.zk3.dec.com
889 + spider-perl\100orb.nashua.nh.us
890 + spider\100peano.zk3.dec.com
891 + spider.boardman\100orb.nashua.nh.us>
893 + spider.boardman\100orb.nashua.nh.us
894 + root\100peano.zk3.dec.com
895 spiros\100lokku.com s.denaxas\100gmail.com
896 spp\100ds.net spp\100psa.pencom.com
897 + spp\100psasolar.colltech.com
898 + spp\100spotter.yi.org
899 stef\100mongueurs.net stef\100payrard.net
900 + s.payrard\100wanadoo.fr
901 + properler\100freesurf.fr
902 + stef\100francenet.fr
903 sthoenna\100efn.org ysth\100raven.shiftboard.com
904 sisyphus1\100optusnet.com.au sisyphus\100cpan.org
906 tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
907 tchrist\100perl.com tchrist\100mox.perl.com
908 + tchrist\100jhereg.perl.com
909 thomas.dorner\100start.de tdorner\100amadeus.net
910 tjenness\100cpan.org t.jenness\100jach.hawaii.edu
911 + timj\100jach.hawaii.edu
912 tobez\100tobez.org tobez\100plab.ku.dk
913 toddr\100cpanel.net toddr\100cpan.org
914 tom\100compton.nu thh\100cyberscience.com
915 tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
916 + tom\100amber.ssd.hcsc.com
918 vkonovalov\100lucent.com vkonovalov\100peterstar.ru
919 + konovalo\100mail.wplus.net
920 + vadim\100vkonovalov.ru
921 + vkonovalov\100spb.lucent.com
922 + vkonovalov\100alcatel-lucent.com
923 + vadim.konovalov\100alcatel-lucent.com
925 whatever\100davidnicol.com davidnicol\100gmail.com
926 wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
927 + wolfgang.laun\100thalesgroup.com
928 + wolfgang.laun\100gmail.com
929 wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
930 yath\100yath.de yath-perlbug\100yath.de