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",
193 # perl internal addresses
194 "perl5-porters\100africa.nicoh.com",
195 "perlbug\100perl.org",,
196 "perl5-porters.nicoh.com",
197 "perlbug-followup\100perl.org",
198 "perlbug-comment\100perl.org",
199 "bug-module-corelist\100rt.cpan.org",
200 "bug-storable\100rt.cpan.org",
201 "bugs-perl5\100bugs6.perl.org",
203 "unknown\100unknown",
204 "unknown\100longtimeago",
205 "unknown\100perl.org",
213 sub read_authors_files {
215 return unless (@authors);
217 foreach my $filename (@authors) {
218 open FH, '<', $filename or die "Can't open $filename: $!";
219 binmode FH, ':encoding(UTF-8)';
223 if (/^([^<]+)<([^>]+)>/) {
225 my ($name, $email) = ($1, $2);
227 $raw{$email} = $name;
229 } elsif (/^([- .'\w]+)[\t\n]/) {
233 } elsif ( length $_ ) {
235 warn "Can't parse line '$_'";
241 foreach ( keys %raw ) {
242 print "E-mail $_ occurs $count{$_} times\n" if $count{$_} > 1;
244 $authors{ $map->{$lc} || $lc } = $raw{$_};
246 $authors{$_} = $_ for qw(? !);
249 sub display_test_output {
250 my $patchers = shift;
252 my $real_names = shift;
254 printf "1..%d\n", scalar keys %$patchers;
255 foreach ( sort keys %$patchers ) {
257 if ($authors->{$_}) {
258 print "ok $count - ".$real_names->{$_} ." $_\n";
260 print "not ok $count - Contributor not found in AUTHORS: $_ ".($real_names->{$_} || '???' )."\n";
261 print STDERR ($real_names->{$_} || '???' )." <$_> not found in AUTHORS\n";
267 sub display_missing_authors {
268 my $patchers = shift;
270 my $real_names = shift;
272 foreach ( sort keys %$patchers ) {
273 next if $authors->{$_};
275 # Sort by number of patches, then name.
276 $missing{ $patchers{$_} }->{$_}++;
278 foreach my $patches ( sort { $b <=> $a } keys %missing ) {
279 print "\n\n=head1 $patches patch(es)\n\n";
280 foreach my $author ( sort keys %{ $missing{$patches} } ) {
281 my $xauthor = $author;
282 $xauthor =~ s/@/\\100/g; # xxx temp hack
283 print "" . ( $real_names->{$author} || $author ) . "\t\t\t<" . $xauthor . ">\n";
288 sub display_ordered {
293 while ( my ( $name, $count ) = each %$what ) {
294 push @{ $sorted[$count] }, $name;
299 return unless @sorted;
301 foreach my $i ( $reverse ? 0 .. $#sorted : reverse 0 .. $#sorted ) {
302 next unless $sorted[$i];
304 $sum += $i * @{ $sorted[$i] };
306 # Value to display is either this one, or the cumulative sum.
307 my $value = $cumulative ? $sum : $i;
309 $prefix = sprintf "%6.2f:\t", 100 * $value / $total;
311 $prefix = "$value:\t";
313 print wrap ( $prefix, "\t", join( " ", sort @{ $sorted[$i] } ), "\n" );
318 my ( $committer, $patch, $author ) = @_;
319 return unless $author;
320 return unless $committer;
322 $author = _raw_address($author);
323 $patchers{$author}++;
325 $committer = _raw_address($committer);
326 if ( $committer ne $author ) {
328 # separate commit credit only if committing someone else's patch
329 $committers{$committer}++;
336 if ($addr =~ /(?:\\?")?\s*\(via RT\) <perlbug-followup\@perl\.org>$/p) {
337 my $name = ${^PREMATCH};
338 $addr = 'perlbug-followup@perl.org';
340 # Try to find the author
342 if (exists $map->{$name}) {
343 $addr = $map->{$name};
344 $real_name = $authors{$addr};
347 while (my ($email, $author_name) = each %authors) {
348 if ($name eq $author_name) {
356 elsif ( $addr =~ /<.*>/ ) {
357 $addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/;
360 $addr =~ s/\[mailto://;
363 $addr = $map->{$addr} || $addr;
364 $addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
366 if ($real_name) { $real_names{$addr} = $real_name }
374 # List of mappings. First entry the "correct" email address, as appears
375 # in the AUTHORS file. Second is any "alias" mapped to it.
377 # If the "correct" email address is a '+', the entry above it is reused;
378 # this for addresses with more than one alias.
380 # Note that all entries are in lowercase. Further, no '@' signs should
381 # appear; use \100 instead.
386 adi enache\100rdslink.ro
387 alanbur alan.burlison\100sun.com
388 + alan.burlison\100uk.sun.com
389 + aburlison\100cix.compulink.co.uk
390 ams ams\100toroid.org
392 chip chip\100pobox.com
394 + salzench\100nielsenmedia.com
395 + chip\100atlantic.net
396 + chip\100rio.atlantic.net
397 + salzench\100dun.nielsen.com
398 + chip\100ci005.sv2.upperbeyond.com
399 craigb craig.berry\100psinetcs.com
400 + craig.berry\100metamorgs.com
401 + craig.berry\100signaltreesolutions.com
402 + craigberry\100mac.com
403 + craig.a.berry\100gmail.com
405 davem davem\100fdgroup.com
406 + davem\100iabyn.nospamdeletethisbit.com
408 + davem\100fdgroup.co.uk
409 + davem\100fdisolutions.com
411 demerphq demerphq\100gmail.com
412 + yves.orton\100de.mci.com
413 + yves.orton\100mciworldcom.de
414 + yves.orton\100booking.com
415 + demerphq\100dromedary.booking.com
416 + demerphq\100gemini.(none)
417 + demerphq\100camel.booking.com
418 + demerphq\100hotmail.com
419 doughera doughera\100lafayette.edu
420 + doughera\100lafcol.lafayette.edu
421 + doughera\100fractal.phys.lafayette.edu
422 + doughera.lafayette.edu
423 + doughera\100newton.phys.lafayette.edu
425 gbarr gbarr\100pobox.com
426 + bodg\100tiuk.ti.com
428 + graham.barr\100tiuk.ti.com
429 + gbarr\100monty.mutatus.co.uk
430 gisle gisle\100activestate.com
433 + aas\100bergen.sn.no
434 gsar gsar\100activestate.com
436 + gsar\100engin.umich.edu
437 hv hv\100crypt.compulink.co.uk
441 + jhietaniemi\100gmail.com
443 + jhi\100alpha.hut.fi
446 + jarkko.hietaniemi\100nokia.com
447 + jarkko.hietaniemi\100cc.hut.fi
448 + jarkko.hietaniemi\100booking.com
449 jesse jesse\100bestpractical.com
452 merijn h.m.brand\100xs4all.nl
453 + h.m.brand\100hccnet.nl
454 + merijn\100l1.procura.nl
455 + merijn\100a5.(none)
456 mhx mhx-perl\100gmx.net
458 mst mst\100shadowcat.co.uk
459 + matthewt\100hercule.scsys.co.uk
460 nicholas nick\100unfortu.net
462 + nick\100talking.bollo.cx
463 + nick\100plum.flirble.org
464 + nick\100babyhippo.co.uk
465 + nick\100bagpuss.unfortu.net
466 + nick\100babyhippo.com
467 + nicholas\100dromedary.ams6.corp.booking.com
468 + Nicholas Clark (sans From field in mail header)
469 pudge pudge\100pobox.com
470 rgs rgarciasuarez\100free.fr
471 + rgarciasuarez\100mandrakesoft.com
472 + rgarciasuarez\100mandriva.com
473 + rgarciasuarez\100gmail.com
474 + raphel.garcia-suarez\100hexaflux.com
476 sky sky\100nanisky.com
477 + artur\100contiller.se
478 + arthur\100contiller.se
479 smueller 7k8lrvf02\100sneakemail.com
480 + kjx9zthh3001\100sneakemail.com
481 + dtr8sin02\100sneakemail.com
482 + rt8363b02\100sneakemail.com
483 + o6hhmk002\100sneakemail.com
484 + smueller\100cpan.org
485 + l2ot9pa02\100sneakemail.com
486 + wyp3rlx02\100sneakemail.com
487 + 0mgwtfbbq\100sneakemail.com
488 + xyey9001\100sneakemail.com
489 steveh steve.m.hay\100googlemail.com
490 + stevehay\100planit.com
491 + steve.hay\100uk.radan.com
492 stevep steve\100fisharerojo.org
493 + steve.peters\100gmail.com
494 + root\100dixie.cscaper.com
495 timb Tim.Bunce\100pobox.com
496 + tim.bunce\100ig.co.uk
497 tonyc tony\100develop-help.com
498 + tony\100openbsd32.tony.develop-help.com
499 + tony\100saturn.(none)
504 \043####\100juerd.nl juerd\100cpan.org
505 + juerd\100c3.convolution.nl
506 + juerd\100convolution.nl
507 a.r.ferreira\100gmail.com aferreira\100shopzilla.com
508 abe\100ztreet.demon.nl abeltje\100cpan.org
509 abela\100hsc.fr abela\100geneanet.org
510 abigail\100abigail.be abigail\100foad.org
511 + abigail\100abigail.nl
513 aburt\100isis.cs.du.edu isis!aburt
514 ach\100mpe.mpg.de ach\100rosat.mpe-garching.mpg.de
515 adavies\100ptc.com alex.davies\100talktalk.net
516 ajohnson\100nvidia.com ajohnson\100wischip.com
517 + anders\100broadcom.com
518 alexm\100netli.com alexm\100w-m.ru
519 alex-p5p\100earth.li alex\100rcon.rog
520 alexmv\100mit.edu alex\100chmrr.net
521 alian\100cpan.org alian\100alianwebserver.com
522 allen\100grumman.com allen\100gateway.grumman.com
523 allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
525 allens\100cpan.org easmith\100beatrice.rutgers.edu
526 + root\100dogberry.rutgers.edu
527 andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
528 + andreas.koenig.7os6vvqr\100franz.ak.mind.de
529 + a.koenig\100mind.de
530 + k\100anna.in-berlin.de
532 + koenig\100anna.mind.de
534 + root\100ak-71.mind.de
535 + root\100ak-75.mind.de
536 + k\100sissy.in-berlin.de
537 + a.koenig\100kulturbox.de
538 + k\100sissy.in-berlin.de
539 + root\100dubravka.in-berlin.de
540 anno4000\100lublin.zrz.tu-berlin.de anno4000\100mailbox.tu-berlin.de
541 + siegel\100zrz.tu-berlin.de
542 apocal@cpan.org perl\1000ne.us
543 arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
544 + gatech!skeeve!arnold
545 arodland\100cpan.org andrew\100hbslabs.com
546 arussell\100cs.uml.edu adam\100adam-pc.(none)
547 ash\100cpan.org ash_cpan\100firemirror.com
548 avarab\100gmail.com avar\100cpan.org
550 bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
551 + bailey\100genetics.upenn.edu
552 + bailey.charles\100gmail.com
553 bah\100ecnvantage.com bholzman\100longitude.com
554 barries\100slaysys.com root\100jester.slaysys.com
555 bkedryna\100home.com bart\100cg681574-a.adubn1.nj.home.com
556 bcarter\100gumdrop.flyinganvil.org q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
557 ben_tilly\100operamail.com btilly\100gmail.com
558 + ben_tilly\100hotmail.com
559 ben\100morrow.me.uk mauzo\100csv.warwick.ac.uk
561 bepi\100perl.it enrico.sorcinelli\100gmail.com
562 bert\100alum.mit.edu bert\100genscan.com
563 bigbang7\100gmail.com ddascalescu+github\100gmail.com
564 blgl\100stacken.kth.se blgl\100hagernas.com
565 + 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com
566 brian.d.foy\100gmail.com bdfoy\100cpan.org
567 BQW10602\100nifty.com sadahiro\100cpan.org
568 bulk88\100hotmail.com bulk88
570 chad.granum\100dreamhost.com exodist7\100gmail.com
571 choroba\100cpan.org choroba\100weed.(none)
572 chromatic\100wgz.org chromatic\100rmci.net
573 ckuskie\100cadence.com colink\100perldreamer.com
574 claes\100surfar.nu claes\100versed.se
575 clintp\100geeksalad.org cpierce1\100ford.com
576 clkao\100clkao.org clkao\100bestpractical.com
577 corion\100corion.net corion\100cpan.org
578 cp\100onsitetech.com publiustemp-p5p\100yahoo.com
579 + publiustemp-p5p3\100yahoo.com
580 cpan\100audreyt.org autrijus\100egb.elixus.org
581 + autrijus\100geb.elixus.org
582 + autrijus\100gmail.com
583 + autrijus\100ossf.iis.sinica.edu.tw
584 + autrijus\100autrijus.org
585 + audreyt\100audreyt.org
586 cpan\100ton.iguana.be me-01\100ton.iguana.be
587 crt\100kiski.net perl\100ctweten.amsite.com
589 dairiki\100dairiki.org dairiki at dairiki.org
590 dagolden\100cpan.org xdaveg\100gmail.com
592 damian\100conway.org damian\100cs.monash.edu.au
593 dan\100sidhe.org sugalsd\100lbcc.cc.or.us
594 + sugalskd\100osshe.edu
595 daniel\100bitpusher.com daniel\100biz.bitpusher.com
596 dave\100mag-sol.com dave\100dave.org.uk
597 david.dyck\100fluke.com dcd\100tc.fluke.com
598 david\100justatheory.com david\100wheeler.net
599 + david\100kineticode.com
600 + david\100wheeler.com
601 + david\100wheeler.net
602 whatever\100davidnicol.com davidnicol\100gmail.com
603 dennis\100booking.com dennis\100camel.ams6.corp.booking.com
604 + dennis.kaarsemaker\100booking.com
605 + dennis\100kaarsemaker.net
606 dev-perl\100pimb.org knew-p5p\100pimb.org
607 + lists-p5p\100pimb.org
608 djberg86\100attbi.com djberg96\100attbi.com
609 dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org
610 domo\100computer.org shouldbedomo\100mac.com
611 + domo\100slipper.ip.lu
613 dougm\100covalent.net dougm\100opengroup.org
615 dougw\100cpan.org doug_wilson\100intuit.com
616 dwegscheid\100qtm.net wegscd\100whirlpool.com
617 edwardp\100excitehome.net epeschko\100den-mdev1
618 + epeschko\100elmer.tci.com
620 egf7\100columbia.edu efifer\100sanwaint.com
621 eggert\100twinsun.com eggert\100sea.sm.unisys.com
622 etj\100cpan.org mohawk2\100users.noreply.github.com
624 fugazi\100zyx.net larrysh\100cpan.org
625 + lshatzer\100islanddata.com
627 gbacon\100itsc.uah.edu gbacon\100adtrn-srv4.adtran.com
628 gerberb\100zenez.com root\100devsys0.zenez.com
629 gfuji\100cpan.org g.psy.va\100gmail.com
630 gerard\100ggoossen.net gerard\100tty.nl
631 gibreel\100pobox.com stephen.zander\100interlock.mckesson.com
633 gideon\100cpan.org gidisrael\100gmail.com
634 gnat\100frii.com gnat\100prometheus.frii.com
635 gp\100familiehaase.de gerrit\100familiehaase.de
636 grazz\100pobox.com grazz\100nyc.rr.com
637 gward\100ase.com greg\100bic.mni.mcgill.ca
638 haggai\100cpan.org alanhaggai\100alanhaggai.org
639 + alanhaggai\100gmail.com
640 hansmu\100xs4all.nl hansm\100icgroup.nl
644 + hansm\100euronet.nl
646 hio\100ymir.co.jp hio\100hio.jp
647 hops\100sco.com hops\100scoot.pdev.sco.com
649 ian.goodacre\100xtra.co.nz ian\100debian.lan
650 ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
652 james\100mastros.biz theorb\100desert-island.me.uk
653 jan\100jandubois.com jand\100activestate.com
654 + jan.dubois\100ibm.net
655 japhy\100pobox.com japhy\100pobox.org
656 + japhy\100perlmonk.org
658 + jeffp\100crusoe.net
659 jari.aalto\100poboxes.com jari.aalto\100cante.net
660 jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
661 jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
662 jbuehler\100hekimian.com jhpb\100hekimian.com
663 jcromie\100100divsol.com jcromie\100cpan.org
664 + jim.cromie\100gmail.com
665 jd\100cpanel.net lightsey\100debian.org
666 jdhedden\100cpan.org jerry\100hedden.us
667 + jdhedden\1001979.usna.com
668 + jdhedden\100gmail.com
669 + jdhedden\100yahoo.com
670 + jhedden\100pn100-02-2-356p.corp.bloomberg.com
671 + jdhedden\100solydxk
672 jeremy\100zawodny.com jzawodn\100wcnet.org
673 jesse\100sig.bsh.com jesse\100ginger
674 jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
675 jfs\100fluent.com jfs\100jfs.fluent.com
676 jhannah\100mutationgrid.com jay\100jays.net
677 + jhannah\100omnihotels.com
678 jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
679 jjore\100cpan.org twists\100gmail.com
680 jkeenan\100cpan.org jkeen\100verizon.net
681 + jkeenan\100dromedary-001.ams6.corp.booking.com
682 jns\100integration-house.com jns\100gellyfish.com
683 + gellyfish\100gellyfish.com
684 john\100atlantech.com john\100titanic.atlantech.com
685 john\100johnwright.org john.wright\100hp.com
686 joseph\100cscaper.com joseph\1005sigma.com
687 joshua\100rodd.us jrodd\100pbs.org
688 jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
689 jpeacock\100messagesystems.com john.peacock\100havurah-software.org
690 + jpeacock\100havurah-software.org
691 + jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
692 + jpeacock\100jpeacock-hp.doesntexist.org
693 + jpeacock\100cpan.org
694 + jpeacock\100rowman.com
695 james.schneider\100db.com jschneid\100netilla.com
696 jpl.jpl\100gmail.com jpl\100research.att.com
697 jql\100accessone.com jql\100jql.accessone.com
698 jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
700 kane\100dwim.org kane\100xs4all.net
705 keith.s.thompson\100gmail.com kst\100mib.org
706 ken\100mathforum.org kenahoo\100gmail.com
707 + ken.williams\100thomsonreuters.com
708 kentfredric\100gmail.com kentnl\100cpan.org
709 kmx\100volny.cz kmx\100volny.cz
711 kroepke\100dolphin-services.de kay\100dolphin-services.de
712 kst\100mib.org kst\100cts.com
714 kstar\100wolfetech.com kstar\100cpan.org
715 + kurt_starsinic\100ml.com
716 + kstar\100www.chapin.edu
717 + kstar\100chapin.edu
718 larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
719 + lwall\100netlabs.com
720 + larry\100netlabs.com
722 + lwall\100scalpel.netlabs.com
723 laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
724 + ml1050\100freemail.hu
725 lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
726 + d-lewart\100uiuc.edu
727 lkundrak\100v3.sk lubo.rintel\100gooddata.com
728 lstein\100cshl.org lstein\100formaggio.cshl.org
729 + lstein\100genome.wi.mit.edu
730 l.mai\100web.de plokinom\100gmail.com
731 lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
732 lutherh\100stratcom.com lutherh\100infinet.com
733 mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
734 marcel\100codewerk.com gr\100univie.ac.at
735 + hanekomu\100gmail.com
736 marcgreen\100cpan.org marcgreen\100wpi.edu
737 markleightonfisher\100gmail.com fisherm\100tce.com
738 + mark-fisher\100mindspring.com
739 mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
740 marnix\100gmail.com pttesac!marnix!vanam
741 marty+p5p\100kasei.com marty\100martian.org
742 mats\100sm6sxl.net mats\100sm5sxl.net
743 mbarbon\100dsi.unive.it mattia.barbon\100libero.it
744 + mattia\100barbon.org
745 mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
746 me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
747 merijnb\100iloquent.nl merijnb\100ms.com
748 + merijnb\100iloquent.com
749 merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
750 mestre.smash\100gmail.com smash\100cpan.org
751 mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
752 mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
753 michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
754 mike\100stok.co.uk mike\100exegenix.com
755 miyagawa\100bulknews.net miyagawa\100edge.co.jp
756 mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
757 mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
758 moritz\100casella.verplant.org moritz\100faui2k3.org
761 neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
762 neeracher\100mac.com neeri\100iis.ee.ethz.ch
763 neil\100bowers.com neilb\100cre.canon.co.uk
765 nospam-abuse\100bloodgate.com tels\100bloodgate.com
766 + perl_dummy\100bloodgate.com
768 ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
769 + ian\100dial.pipex.com
770 ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
771 ikegami\100adaelis.com eric\100fmdev10.(none)
772 ilmari\100ilmari.org ilmari\100vesla.ilmari.org
773 illpide\100telecel.pt arbor\100al37al08.telecel.pt
774 # see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
776 ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
777 + nospam-abuse\100ilyaz.org
778 + [9]ilya\100math.ohio-state.edu
779 ilya\100martynov.org ilya\100juil.nonet
781 joshua.pritikin\100db.com joshua\100paloalto.com
783 litt\100acm.org tlhackque\100yahoo.com
785 meyering@asic.sc.ti.com jim\100meyering.net
787 okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
788 orwant\100oreilly.com orwant\100media.mit.edu
790 p5-authors\100crystalflame.net perl\100crystalflame.net
791 + rs\100crystalflame.net
792 + coral\100eekeek.org
793 + coral\100moonlight.crystalflame.net
794 + rs\100oregonnet.com
796 paul.green\100stratus.com paul_greenvos\100vos.stratus.com
797 + pgreen\100seussnt.stratus.com
798 paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
799 + paul.marquess\100ntlworld.com
800 + paul.marquess\100openwave.com
801 + pmarquess\100bfsec.bt.co.uk
803 + paul\100paul-desktop.(none)
804 Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
805 pcg\100goof.com schmorp\100schmorp.de
806 perl\100cadop.com cdp\100hpescdp.fc.hp.com
807 perl\100greerga.m-l.org greerga\100m-l.org
808 perl\100profvince.com vince\100profvince.com
809 perl-rt\100wizbit.be p5p\100perl.wizbit.be
810 # Maybe we should special case this to get real names out?
811 Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
812 # NOTE: There is an intentional trailing space in the line above
813 pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
815 ribasushi@cpan.org rabbit\100rabbit.us
816 + rabbit+bugs\100rabbit.us
817 perl\100aaroncrane.co.uk arc\100cpan.org
818 phil\100perkpartners.com phil\100finchcomputer.com
819 pimlott\100idiomtech.com andrew\100pimlott.net
820 + pimlott\100abel.math.harvard.edu
821 pixel\100mandriva.com pixel\100mandrakesoft.com
822 pne\100cpan.org philip.newton\100gmx.net
823 + philip.newton\100datenrevision.de
825 pprymmer\100factset.com pvhp\100forte.com
826 khw\100cpan.org khw\100karl.(none)
827 + public\100khwilliamson.com
828 + khw\100khw-desktop.(none)
830 radu\100netsoft.ro rgreab\100fx.ro
831 rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
832 raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
833 module@renee-baecker.de renee.baecker\100smart-websolutions.de
834 + reneeb\100reneeb-desktop.(none)
835 + github@renee-baecker.de
836 + otrs\100ubuntu.(none)
837 + perl\100renee-baecker.de
838 + reb\100perl-services.de
839 richard.foley\100rfi.net richard.foley\100t-online.de
840 + richard.foley\100ubs.com
841 + richard.foley\100ubsw.com
842 rick\100consumercontact.com rick\100bort.ca
843 + rick.delaney\100rogers.com
845 + rick.delaney\100home.com
846 rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
847 + perl.p5p\100rjbs.manxome.org
848 rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
849 + rjk-perl-p5p\100tamias.net
851 rjray\100redhat.com rjray\100uswest.com
852 rmgiroux\100acm.org rmgiroux\100hotmail.com
853 + mgiroux\100bear.com
854 rmbarker\100cpan.org rmb1\100cise.npl.co.uk
855 + robin.barker\100npl.co.uk
856 + rmb\100cise.npl.co.uk
857 + robin\100spade-ubuntu.(none)
858 + r.m.barker\100btinternet.com
859 + rmbarker.cpan\100btinternet.com
860 robertmay\100cpan.org rob\100themayfamily.me.uk
861 roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
862 robin\100cpan.org robin\100kitsite.com
863 roderick\100argon.org roderick\100gate.net
864 + roderick\100ibcinc.com
865 argrath\100ub32.org root\100ub32.org
866 rootbeer\100teleport.com rootbeer\100redcat.com
867 + tomphoenix\100unknown
868 rurban\100x-ray.at rurban\100cpan.org
869 + rurban\100cpanel.net
870 rvtol+news\100isolution.nl rvtol\100isolution.nl
871 sartak\100bestpractical.com sartak\100gmail.com
873 sadinoff\100olf.com danny-cpan\100sadinoff.com
874 schubiger\100cpan.org steven\100accognoscere.org
875 + sts\100accognoscere.org
876 + schubiger\100gmail.com
878 schwern\100pobox.com schwern\100gmail.com
879 + schwern\100athens.arena-i.com
880 + schwern\100blackrider.aocn.com
881 + schwern\100ool-18b93024.dyn.optonline.net
882 scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
884 schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
885 + schwab\100ls5.informatik.uni-dortmund.de
886 sebastien\100aperghis.net maddingue\100free.fr
888 shigeya\100wide.ad.jp shigeya\100foretune.co.jp
889 shlomif\100cpan.org shlomif\100vipe.technion.ac.il
890 + shlomif\100iglu.org.il
891 + shlomif+processed-by-perl\100gmail.com
892 + shlomif\100shlomifish.org
893 simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
894 + simon\100brecon.co.uk
895 + simon\100othersideofthe.earth.li
896 + simon\100cozens.net
897 + simon\100netthink.co.uk
898 lannings\100who.int lannings\100gmail.com
899 + slanning\100cpan.org
900 slaven\100rezic.de slaven.rezic\100berlin.de
901 + srezic\100iconmobile.com
903 + eserte\100cs.tu-berlin.de
904 + eserte\100vran.herceg.de
905 smcc\100mit.edu smcc\100ocf.berkeley.edu
906 + smcc\100csua.berkeley.edu
908 + smccam\100uclink4.berkeley.edu
909 spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
910 + spider\100leggy.zk3.dec.com
911 + spider-perl\100orb.nashua.nh.us
912 + spider\100peano.zk3.dec.com
913 + spider.boardman\100orb.nashua.nh.us>
915 + spider.boardman\100orb.nashua.nh.us
916 + root\100peano.zk3.dec.com
917 spiros\100lokku.com s.denaxas\100gmail.com
918 spp\100ds.net spp\100psa.pencom.com
919 + spp\100psasolar.colltech.com
920 + spp\100spotter.yi.org
921 stef\100mongueurs.net stef\100payrard.net
922 + s.payrard\100wanadoo.fr
923 + properler\100freesurf.fr
924 + stef\100francenet.fr
925 stevan\100cpan.org stevan.little\100gmail.com
926 + stevan.little\100iinteractive.com
927 sthoenna\100efn.org ysth\100raven.shiftboard.com
928 sisyphus1\100optusnet.com.au sisyphus\100cpan.org
930 tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
931 tchrist\100perl.com tchrist\100mox.perl.com
932 + tchrist\100jhereg.perl.com
933 thomas.dorner\100start.de tdorner\100amadeus.net
934 tjenness\100cpan.org t.jenness\100jach.hawaii.edu
935 + timj\100jach.hawaii.edu
936 tobez\100tobez.org tobez\100plab.ku.dk
937 toddr\100cpan.org toddr\100cpanel.net
938 tom\100compton.nu thh\100cyberscience.com
939 tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
940 + tom\100amber.ssd.hcsc.com
942 vkonovalov\100lucent.com vkonovalov\100peterstar.ru
943 + konovalo\100mail.wplus.net
944 + vadim\100vkonovalov.ru
945 + vkonovalov\100spb.lucent.com
946 + vkonovalov\100alcatel-lucent.com
947 + vadim.konovalov\100alcatel-lucent.com
949 whatever\100davidnicol.com davidnicol\100gmail.com
950 wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
951 + wolfgang.laun\100thalesgroup.com
952 + wolfgang.laun\100gmail.com
953 wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
954 yath\100yath.de yath-perlbug\100yath.de