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