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