3 my ($committer, $patch, $author);
7 $Text::Wrap::columns = 80;
9 my ($rank, $ta, $ack, $who, $tap) = (0) x 5;
10 my ($author_file, $percentage, $cumulative, $reverse);
11 my (%authors, %untraced, %patchers, %committers, %real_names);
13 my $result = GetOptions (
17 "thanks-applied" => \$ta,
22 "authors=s" => \$author_file,
23 "percentage" => \$percentage, # show as %age
24 "cumulative" => \$cumulative,
25 "reverse" => \$reverse,
28 if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) {
32 $author_file ||= './AUTHORS';
33 die "Can't locate '$author_file'. Specify it with '--authors <path>'."
34 unless -f $author_file;
36 my $map = generate_known_author_map();
38 read_authors_files($author_file);
42 parse_commits_from_stdin();
43 display_ordered(\%patchers);
45 parse_commits_from_stdin();
46 display_ordered(\%committers);
48 parse_commits_from_stdin_authors();
49 display_test_output(\%patchers, \%authors, \%real_names);
51 parse_commits_from_stdin();
52 display_missing_authors(\%patchers, \%authors, \%real_names);
54 parse_commits_from_stdin();
55 list_authors(\%patchers, \%authors);
63 Usage: $0 [modes] [modifiers] <git-log-output-file>
66 --who # show list of unique authors by full name
67 --rank # rank authors by patches
68 --thanks-applied # ranks committers of others' patches
69 --missing # display authors not in AUTHORS
70 --tap # show authors present/missing as TAP
73 --authors <authors-file> # path to authors file (default: ./AUTHORS)
74 --percentage # show rankings as percentages
75 --cumulative # show rankings cumulatively
76 --reverse # show rankings in reverse
78 Generate git-log-output-file with git log --pretty=fuller rev1..rev2
79 (or pipe by specifying '-' for stdin). For example:
80 \$ git log --pretty=fuller v5.12.0..v5.12.1 > gitlog
81 \$ perl Porting/checkAUTHORS.pl --rank --percentage gitlog
86 my ($patchers, $authors) = @_;
87 binmode(STDOUT, ":utf8");
88 print wrap '', '', join(', ', sort { lc $a cmp lc $b }
89 map { $authors->{$_} }
90 keys %$patchers) . ".\n";
93 sub parse_commits_from_stdin {
94 my @lines = split( /^commit\s*/sm, join( '', <> ) );
97 next if m/^(\S*?)^Merge:/ism; # skip merge commits
98 if (m/^(.*?)^Author:\s*(.*?)^AuthorDate:\s*.*?^Commit:\s*(.*?)^(.*)$/gism) {
101 ( $patch, $author, $committer ) = ( $1, $2, $3 );
103 unless ($author) { die $_ }
105 unless ($committer) { die $_ }
106 process( $committer, $patch, $author );
108 die "XXX $_ did not match";
114 # just grab authors. Quicker than parse_commits_from_stdin
116 sub parse_commits_from_stdin_authors {
118 next unless /^Author:\s*(.*)$/;
120 $author = _raw_address($author);
121 $patchers{$author}++;
126 sub generate_known_author_map {
134 if ( my ( $correct, $alias ) = /^\s*([^#\s]\S*)\s+(.*\S)/ ) {
135 $correct =~ s/^\\043/#/;
136 if ( $correct eq '+' ) { $correct = $prev }
137 else { $prev = $correct }
138 $map{$alias} = $correct;
143 # Email addresses for we do not have names.
147 "bah\100longitude.com",
148 "bbucklan\100jpl-devvax.jpl.nasa.gov",
150 "bob\100starlabs.net",
151 "cygwin\100cygwin.com",
152 "david\100dhaller.de", "erik\100cs.uni-jena.de", "info\100lingo.kiev.ua", # Lingo Translation agency
153 "jms\100mathras.comcast.net",
154 "premchai21\100yahoo.com",
156 "raf\100tradingpost.com.au",
157 "smoketst\100hp46t243.cup.hp.com", "root\100chronos.fi.muni.cz", # no clue - jrv 20090803
158 "gomar\100md.media-web.de", # no clue - jrv 20090803
159 "data-drift\100so.uio.no", # no data. originally private message from 199701282014.VAA12645@selters.uio.no
160 "arbor\100al37al08.telecel.pt"
161 , # reported perlbug ticket 5196 - no actual code contribution. no real name - jrv 20091006
162 "oracle\100pcr8.pcr.com", # Reported perlbug ticket 1015 - no patch - Probably Ed Eddington ed@pcr.com
163 "snaury\100gmail.com", # Reported cpan ticket 35943, with patch for fix
167 # Email addresses for people that don't have an email address in AUTHORS
168 # Presumably deliberately?
173 # Nick Ing-Simmons has passed away (2006-09-25).
174 "nick\100ing-simmons.net",
175 "nik\100tiuk.ti.com",
176 "nick.ing-simmons\100elixent.com",
177 "nick\100ni-s.u-net.com",
178 "nick.ing-simmons\100tiuk.ti.com",
180 # Iain Truskett has passed away (2003-12-29).
181 "perl\100dellah.anu.edu.au", "spoon\100dellah.org", "spoon\100cpan.org",
184 "me-02\100ton.iguana.be", "perl-5.8.0\100ton.iguana.be", "perl5-porters\100ton.iguana.be",
187 "beau\100beaucox.com",
190 "ml-perl\100thepierianspring.org",
192 # perl internal addresses
193 "perl5-porters\100africa.nicoh.com",
194 "perlbug\100perl.org",,
195 "perl5-porters.nicoh.com",
196 "perlbug-followup\100perl.org",
197 "perlbug-comment\100perl.org",
198 "bug-module-corelist\100rt.cpan.org",
199 "bug-storable\100rt.cpan.org",
200 "bugs-perl5\100bugs6.perl.org",
202 "unknown\100unknown",
203 "unknown\100longtimeago",
204 "unknown\100perl.org",
212 sub read_authors_files {
214 return unless (@authors);
216 foreach my $filename (@authors) {
217 open FH, "<$filename" or die "Can't open $filename: $!";
218 binmode FH, ':encoding(UTF-8)';
222 if (/^([^<]+)<([^>]+)>/) {
224 my ($name, $email) = ($1, $2);
226 $raw{$email} = $name;
228 } elsif (/^([-A-Za-z0-9 .\'À-ÖØöø-ÿ]+)[\t\n]/) {
232 } elsif ( length $_ ) {
234 warn "Can't parse line '$_'";
240 foreach ( keys %raw ) {
241 print "E-mail $_ occurs $count{$_} times\n" if $count{$_} > 1;
243 $authors{ $map->{$lc} || $lc } = $raw{$_};
245 $authors{$_} = $_ for qw(? !);
248 sub display_test_output {
249 my $patchers = shift;
251 my $real_names = shift;
253 printf "1..%d\n", scalar keys %$patchers;
254 foreach ( sort keys %$patchers ) {
256 if ($authors->{$_}) {
257 print "ok $count - ".$real_names->{$_} ." $_\n";
259 print "not ok $count - Contributor not found in AUTHORS: $_ ".($real_names->{$_} || '???' )."\n";
265 sub display_missing_authors {
266 my $patchers = shift;
268 my $real_names = shift;
270 foreach ( sort keys %$patchers ) {
271 next if $authors->{$_};
273 # Sort by number of patches, then name.
274 $missing{ $patchers{$_} }->{$_}++;
276 foreach my $patches ( sort { $b <=> $a } keys %missing ) {
277 print "\n\n=head1 $patches patch(es)\n\n";
278 foreach my $author ( sort keys %{ $missing{$patches} } ) {
279 my $xauthor = $author;
280 $xauthor =~ s/@/\\100/g; # xxx temp hack
281 print "" . ( $real_names->{$author} || $author ) . "\t\t\t<" . $xauthor . ">\n";
286 sub display_ordered {
291 while ( my ( $name, $count ) = each %$what ) {
292 push @{ $sorted[$count] }, $name;
297 return unless @sorted;
299 foreach my $i ( $reverse ? 0 .. $#sorted : reverse 0 .. $#sorted ) {
300 next unless $sorted[$i];
302 $sum += $i * @{ $sorted[$i] };
304 # Value to display is either this one, or the cumulative sum.
305 my $value = $cumulative ? $sum : $i;
307 $prefix = sprintf "%6.2f:\t", 100 * $value / $total;
309 $prefix = "$value:\t";
311 print wrap ( $prefix, "\t", join( " ", sort @{ $sorted[$i] } ), "\n" );
316 my ( $committer, $patch, $author ) = @_;
317 return unless $author;
318 return unless $committer;
320 $author = _raw_address($author);
321 $patchers{$author}++;
323 $committer = _raw_address($committer);
324 if ( $committer ne $author ) {
326 # separate commit credit only if committing someone else's patch
327 $committers{$committer}++;
334 if ($addr =~ /(?:\\?")?\s*\(via RT\) <perlbug-followup\@perl\.org>$/p) {
335 my $name = ${^PREMATCH};
336 $addr = 'perlbug-followup@perl.org';
338 # Try to find the author
340 if (exists $map->{$name}) {
341 $addr = $map->{$name};
342 $real_name = $authors{$addr};
345 while (my ($email, $author_name) = each %authors) {
346 if ($name eq $author_name) {
354 elsif ( $addr =~ /<.*>/ ) {
355 $addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/;
358 $addr =~ s/\[mailto://;
361 $addr = $map->{$addr} || $addr;
362 $addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
364 if ($real_name) { $real_names{$addr} = $real_name }
372 # List of mappings. First entry the "correct" email address, as appears
373 # in the AUTHORS file. Second is any "alias" mapped to it.
375 # If the "correct" email address is a '+', the entry above it is reused;
376 # this for addresses with more than one alias.
378 # Note that all entries are in lowercase. Further, no '@' signs should
379 # appear; use \100 instead.
384 adi enache\100rdslink.ro
385 alanbur alan.burlison\100sun.com
386 + alan.burlison\100uk.sun.com
387 + aburlison\100cix.compulink.co.uk
388 ams ams\100toroid.org
390 chip chip\100pobox.com
392 + salzench\100nielsenmedia.com
393 + chip\100atlantic.net
394 + chip\100rio.atlantic.net
395 + salzench\100dun.nielsen.com
396 + chip\100ci005.sv2.upperbeyond.com
397 craigb craig.berry\100psinetcs.com
398 + craig.berry\100metamorgs.com
399 + craig.berry\100signaltreesolutions.com
400 + craigberry\100mac.com
401 + craig.a.berry\100gmail.com
403 davem davem\100fdgroup.com
404 + davem\100iabyn.nospamdeletethisbit.com
406 + davem\100fdgroup.co.uk
407 + davem\100fdisolutions.com
409 demerphq demerphq\100gmail.com
410 + yves.orton\100de.mci.com
411 + yves.orton\100mciworldcom.de
412 + yves.orton\100booking.com
413 + demerphq\100dromedary.booking.com
414 + demerphq\100gemini.(none)
415 + demerphq\100camel.booking.com
416 + demerphq\100hotmail.com
417 doughera doughera\100lafayette.edu
418 + doughera\100lafcol.lafayette.edu
419 + doughera\100fractal.phys.lafayette.edu
420 + doughera.lafayette.edu
421 + doughera\100newton.phys.lafayette.edu
423 gbarr gbarr\100pobox.com
424 + bodg\100tiuk.ti.com
426 + graham.barr\100tiuk.ti.com
427 + gbarr\100monty.mutatus.co.uk
428 gisle gisle\100activestate.com
431 + aas\100bergen.sn.no
432 gsar gsar\100activestate.com
434 + gsar\100engin.umich.edu
435 hv hv\100crypt.compulink.co.uk
439 + jhietaniemi\100gmail.com
441 + jhi\100alpha.hut.fi
444 + jarkko.hietaniemi\100nokia.com
445 + jarkko.hietaniemi\100cc.hut.fi
446 + jarkko.hietaniemi\100booking.com
447 jesse jesse\100bestpractical.com
450 merijn h.m.brand\100xs4all.nl
451 + h.m.brand\100hccnet.nl
452 + merijn\100l1.procura.nl
453 + merijn\100a5.(none)
454 mhx mhx-perl\100gmx.net
456 mst mst\100shadowcat.co.uk
457 + matthewt\100hercule.scsys.co.uk
458 nicholas nick\100unfortu.net
460 + nick\100talking.bollo.cx
461 + nick\100plum.flirble.org
462 + nick\100babyhippo.co.uk
463 + nick\100bagpuss.unfortu.net
464 + nick\100babyhippo.com
465 + nicholas\100dromedary.ams6.corp.booking.com
466 + Nicholas Clark (sans From field in mail header)
467 pudge pudge\100pobox.com
468 rgs rgarciasuarez\100free.fr
469 + rgarciasuarez\100mandrakesoft.com
470 + rgarciasuarez\100mandriva.com
471 + rgarciasuarez\100gmail.com
472 + raphel.garcia-suarez\100hexaflux.com
474 sky sky\100nanisky.com
475 + artur\100contiller.se
476 + arthur\100contiller.se
477 smueller 7k8lrvf02\100sneakemail.com
478 + kjx9zthh3001\100sneakemail.com
479 + dtr8sin02\100sneakemail.com
480 + rt8363b02\100sneakemail.com
481 + o6hhmk002\100sneakemail.com
482 + smueller\100cpan.org
483 + l2ot9pa02\100sneakemail.com
484 + wyp3rlx02\100sneakemail.com
485 + 0mgwtfbbq\100sneakemail.com
486 + xyey9001\100sneakemail.com
487 steveh steve.m.hay\100googlemail.com
488 + stevehay\100planit.com
489 + steve.hay\100uk.radan.com
490 stevep steve\100fisharerojo.org
491 + steve.peters\100gmail.com
492 + root\100dixie.cscaper.com
493 timb Tim.Bunce\100pobox.com
494 + tim.bunce\100ig.co.uk
495 tonyc tony\100develop-help.com
496 + tony\100openbsd32.tony.develop-help.com
497 + tony\100saturn.(none)
502 \043####\100juerd.nl juerd\100cpan.org
503 + juerd\100c3.convolution.nl
504 + juerd\100convolution.nl
505 a.r.ferreira\100gmail.com aferreira\100shopzilla.com
506 abe\100ztreet.demon.nl abeltje\100cpan.org
507 abela\100hsc.fr abela\100geneanet.org
508 abigail\100abigail.be abigail\100foad.org
509 + abigail\100abigail.nl
511 aburt\100isis.cs.du.edu isis!aburt
512 ach\100mpe.mpg.de ach\100rosat.mpe-garching.mpg.de
513 adavies\100ptc.com alex.davies\100talktalk.net
514 ajohnson\100nvidia.com ajohnson\100wischip.com
515 + anders\100broadcom.com
516 alexm\100netli.com alexm\100w-m.ru
517 alex-p5p\100earth.li alex\100rcon.rog
518 alexmv\100mit.edu alex\100chmrr.net
519 alian\100cpan.org alian\100alianwebserver.com
520 allen\100grumman.com allen\100gateway.grumman.com
521 allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
523 allens\100cpan.org easmith\100beatrice.rutgers.edu
524 + root\100dogberry.rutgers.edu
525 andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
526 + andreas.koenig.7os6vvqr\100franz.ak.mind.de
527 + a.koenig\100mind.de
528 + k\100anna.in-berlin.de
530 + koenig\100anna.mind.de
532 + root\100ak-71.mind.de
533 + root\100ak-75.mind.de
534 + k\100sissy.in-berlin.de
535 + a.koenig\100kulturbox.de
536 + k\100sissy.in-berlin.de
537 + root\100dubravka.in-berlin.de
538 anno4000\100lublin.zrz.tu-berlin.de anno4000\100mailbox.tu-berlin.de
539 + siegel\100zrz.tu-berlin.de
540 apocal@cpan.org perl\1000ne.us
541 arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
542 + gatech!skeeve!arnold
543 arodland\100cpan.org andrew\100hbslabs.com
544 arussell\100cs.uml.edu adam\100adam-pc.(none)
545 ash\100cpan.org ash_cpan\100firemirror.com
546 avarab\100gmail.com avar\100cpan.org
548 bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
549 + bailey\100genetics.upenn.edu
550 + bailey.charles\100gmail.com
551 bah\100ecnvantage.com bholzman\100longitude.com
552 barries\100slaysys.com root\100jester.slaysys.com
553 bkedryna\100home.com bart\100cg681574-a.adubn1.nj.home.com
554 bcarter\100gumdrop.flyinganvil.org q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
555 ben_tilly\100operamail.com btilly\100gmail.com
556 + ben_tilly\100hotmail.com
557 ben\100morrow.me.uk mauzo\100csv.warwick.ac.uk
559 bepi\100perl.it enrico.sorcinelli\100gmail.com
560 bert\100alum.mit.edu bert\100genscan.com
561 bigbang7\100gmail.com ddascalescu+github\100gmail.com
562 blgl\100stacken.kth.se blgl\100hagernas.com
563 + 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com
564 brian.d.foy\100gmail.com bdfoy\100cpan.org
565 BQW10602\100nifty.com sadahiro\100cpan.org
566 bulk88\100hotmail.com bulk88
568 chad.granum\100dreamhost.com exodist7\100gmail.com
569 choroba\100cpan.org choroba\100weed.(none)
570 chromatic\100wgz.org chromatic\100rmci.net
571 ckuskie\100cadence.com colink\100perldreamer.com
572 claes\100surfar.nu claes\100versed.se
573 clintp\100geeksalad.org cpierce1\100ford.com
574 clkao\100clkao.org clkao\100bestpractical.com
575 corion\100corion.net corion\100cpan.org
576 cp\100onsitetech.com publiustemp-p5p\100yahoo.com
577 + publiustemp-p5p3\100yahoo.com
578 cpan\100audreyt.org autrijus\100egb.elixus.org
579 + autrijus\100geb.elixus.org
580 + autrijus\100gmail.com
581 + autrijus\100ossf.iis.sinica.edu.tw
582 + autrijus\100autrijus.org
583 + audreyt\100audreyt.org
584 cpan\100ton.iguana.be me-01\100ton.iguana.be
585 crt\100kiski.net perl\100ctweten.amsite.com
587 dairiki\100dairiki.org dairiki at dairiki.org
588 dagolden\100cpan.org xdaveg\100gmail.com
589 damian\100conway.org damian\100cs.monash.edu.au
590 dan\100sidhe.org sugalsd\100lbcc.cc.or.us
591 + sugalskd\100osshe.edu
592 daniel\100bitpusher.com daniel\100biz.bitpusher.com
593 david.dyck\100fluke.com dcd\100tc.fluke.com
594 david\100justatheory.com david\100wheeler.net
595 + david\100kineticode.com
596 + david\100wheeler.com
597 + david\100wheeler.net
598 dennis\100booking.com dennis\100camel.ams6.corp.booking.com
599 + dennis.kaarsemaker\100booking.com
600 + dennis\100kaarsemaker.net
601 dev-perl\100pimb.org knew-p5p\100pimb.org
602 + lists-p5p\100pimb.org
603 djberg86\100attbi.com djberg96\100attbi.com
604 dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org
605 domo\100computer.org shouldbedomo\100mac.com
606 + domo\100slipper.ip.lu
608 dougm\100covalent.net dougm\100opengroup.org
610 dougw\100cpan.org doug_wilson\100intuit.com
611 dwegscheid\100qtm.net wegscd\100whirlpool.com
612 edwardp\100excitehome.net epeschko\100den-mdev1
613 + epeschko\100elmer.tci.com
615 egf7\100columbia.edu efifer\100sanwaint.com
616 eggert\100twinsun.com eggert\100sea.sm.unisys.com
618 fugazi\100zyx.net larrysh\100cpan.org
619 + lshatzer\100islanddata.com
621 gbacon\100itsc.uah.edu gbacon\100adtrn-srv4.adtran.com
622 gerberb\100zenez.com root\100devsys0.zenez.com
623 gfuji\100cpan.org g.psy.va\100gmail.com
624 gerard\100ggoossen.net gerard\100tty.nl
625 gibreel\100pobox.com stephen.zander\100interlock.mckesson.com
627 gideon\100cpan.org gidisrael\100gmail.com
628 gnat\100frii.com gnat\100prometheus.frii.com
629 gp\100familiehaase.de gerrit\100familiehaase.de
630 grazz\100pobox.com grazz\100nyc.rr.com
631 gward\100ase.com greg\100bic.mni.mcgill.ca
632 haggai\100cpan.org alanhaggai\100alanhaggai.org
633 + alanhaggai\100gmail.com
634 hansmu\100xs4all.nl hansm\100icgroup.nl
638 + hansm\100euronet.nl
640 hio\100ymir.co.jp hio\100hio.jp
641 hops\100sco.com hops\100scoot.pdev.sco.com
643 ian.goodacre\100xtra.co.nz ian\100debian.lan
644 ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
646 james\100mastros.biz theorb\100desert-island.me.uk
647 jand\100activestate.com jan.dubois\100ibm.net
648 japhy\100pobox.com japhy\100pobox.org
649 + japhy\100perlmonk.org
651 + jeffp\100crusoe.net
652 jari.aalto\100poboxes.com jari.aalto\100cante.net
653 jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
654 jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
655 jbuehler\100hekimian.com jhpb\100hekimian.com
656 jcromie\100100divsol.com jcromie\100cpan.org
657 + jim.cromie\100gmail.com
658 jdhedden\100cpan.org jerry\100hedden.us
659 + jdhedden\1001979.usna.com
660 + jdhedden\100gmail.com
661 + jdhedden\100yahoo.com
662 + jhedden\100pn100-02-2-356p.corp.bloomberg.com
663 jeremy\100zawodny.com jzawodn\100wcnet.org
664 jesse\100sig.bsh.com jesse\100ginger
665 jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
666 jfs\100fluent.com jfs\100jfs.fluent.com
667 jhannah\100mutationgrid.com jay\100jays.net
668 + jhannah\100omnihotels.com
669 jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
670 jjore\100cpan.org twists\100gmail.com
671 jkeenan\100cpan.org jkeen\100verizon.net
672 + jkeenan\100dromedary-001.ams6.corp.booking.com
673 jns\100integration-house.com jns\100gellyfish.com
674 + gellyfish\100gellyfish.com
675 john\100atlantech.com john\100titanic.atlantech.com
676 john\100johnwright.org john.wright\100hp.com
677 joseph\100cscaper.com joseph\1005sigma.com
678 joshua\100rodd.us jrodd\100pbs.org
679 jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
680 jpeacock\100messagesystems.com john.peacock\100havurah-software.org
681 + jpeacock\100havurah-software.org
682 + jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
683 + jpeacock\100jpeacock-hp.doesntexist.org
684 + jpeacock\100cpan.org
685 + jpeacock\100rowman.com
686 jpl.jpl\100gmail.com jpl\100research.att.com
687 jql\100accessone.com jql\100jql.accessone.com
688 jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
690 kane\100dwim.org kane\100xs4all.net
695 keith.s.thompson\100gmail.com kst\100mib.org
696 ken\100mathforum.org kenahoo\100gmail.com
697 + ken.williams\100thomsonreuters.com
698 kentfredric\100gmail.com kentnl\100cpan.org
699 kroepke\100dolphin-services.de kay\100dolphin-services.de
700 kst\100mib.org kst\100cts.com
702 kstar\100wolfetech.com kstar\100cpan.org
703 + kurt_starsinic\100ml.com
704 + kstar\100www.chapin.edu
705 + kstar\100chapin.edu
706 larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
707 + lwall\100netlabs.com
708 + larry\100netlabs.com
710 + lwall\100scalpel.netlabs.com
711 laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
712 + ml1050\100freemail.hu
713 lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
714 + d-lewart\100uiuc.edu
715 lkundrak\100v3.sk lubo.rintel\100gooddata.com
716 lstein\100cshl.org lstein\100formaggio.cshl.org
717 + lstein\100genome.wi.mit.edu
718 l.mai\100web.de plokinom\100gmail.com
719 lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
720 lutherh\100stratcom.com lutherh\100infinet.com
721 mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
722 marcel\100codewerk.com gr\100univie.ac.at
723 + hanekomu\100gmail.com
724 marcgreen\100cpan.org marcgreen\100wpi.edu
725 markleightonfisher\100gmail.com fisherm\100tce.com
726 mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
727 marnix\100gmail.com pttesac!marnix!vanam
728 marty+p5p\100kasei.com marty\100martian.org
729 mats\100sm6sxl.net mats\100sm5sxl.net
730 mbarbon\100dsi.unive.it mattia.barbon\100libero.it
731 mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
732 me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
733 merijnb\100iloquent.nl merijnb\100ms.com
734 + merijnb\100iloquent.com
735 merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
736 mestre.smash\100gmail.com smash\100cpan.org
737 mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
738 mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
739 michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
740 mike\100stok.co.uk mike\100exegenix.com
741 miyagawa\100bulknews.net miyagawa\100edge.co.jp
742 mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
743 mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
744 moritz\100casella.verplant.org moritz\100faui2k3.org
747 neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
748 neeracher\100mac.com neeri\100iis.ee.ethz.ch
749 neil\100bowers.com neilb\100cre.canon.co.uk
751 nospam-abuse\100bloodgate.com tels\100bloodgate.com
752 + perl_dummy\100bloodgate.com
754 ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
755 + ian\100dial.pipex.com
756 ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
757 ikegami\100adaelis.com eric\100fmdev10.(none)
758 ilmari\100ilmari.org ilmari\100vesla.ilmari.org
759 illpide\100telecel.pt arbor\100al37al08.telecel.pt
760 # see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
762 ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
763 + nospam-abuse\100ilyaz.org
764 + [9]ilya\100math.ohio-state.edu
765 ilya\100martynov.org ilya\100juil.nonet
767 joshua.pritikin\100db.com joshua\100paloalto.com
769 litt\100acm.org tlhackque\100yahoo.com
771 meyering@asic.sc.ti.com jim\100meyering.net
773 okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
774 orwant\100oreilly.com orwant\100media.mit.edu
776 p5-authors\100crystalflame.net perl\100crystalflame.net
777 + rs\100crystalflame.net
778 + coral\100eekeek.org
779 + coral\100moonlight.crystalflame.net
780 + rs\100oregonnet.com
782 paul.green\100stratus.com paul_greenvos\100vos.stratus.com
783 + pgreen\100seussnt.stratus.com
784 paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
785 + paul.marquess\100ntlworld.com
786 + paul.marquess\100openwave.com
787 + pmarquess\100bfsec.bt.co.uk
789 + paul\100paul-desktop.(none)
790 Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
791 pcg\100goof.com schmorp\100schmorp.de
792 perl\100cadop.com cdp\100hpescdp.fc.hp.com
793 perl\100greerga.m-l.org greerga\100m-l.org
794 perl\100profvince.com vince\100profvince.com
795 perl-rt\100wizbit.be p5p\100perl.wizbit.be
796 # Maybe we should special case this to get real names out?
797 Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
798 # NOTE: There is an intentional trailing space in the line above
799 pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
801 ribasushi@cpan.org rabbit\100rabbit.us
802 + rabbit+bugs\100rabbit.us
803 perl\100aaroncrane.co.uk arc\100cpan.org
804 phil\100perkpartners.com phil\100finchcomputer.com
805 pimlott\100idiomtech.com andrew\100pimlott.net
806 + pimlott\100abel.math.harvard.edu
807 pixel\100mandriva.com pixel\100mandrakesoft.com
808 pne\100cpan.org philip.newton\100gmx.net
809 + philip.newton\100datenrevision.de
811 pprymmer\100factset.com pvhp\100forte.com
812 khw\100cpan.org khw\100karl.(none)
813 + public\100khwilliamson.com
814 + khw\100khw-desktop.(none)
816 radu\100netsoft.ro rgreab\100fx.ro
817 rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
818 raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
819 module@renee-baecker.de renee.baecker\100smart-websolutions.de
820 + reneeb\100reneeb-desktop.(none)
821 + github@renee-baecker.de
822 + otrs\100ubuntu.(none)
823 + perl\100renee-baecker.de
824 richard.foley\100rfi.net richard.foley\100t-online.de
825 + richard.foley\100ubs.com
826 + richard.foley\100ubsw.com
827 rick\100consumercontact.com rick\100bort.ca
828 + rick.delaney\100rogers.com
830 + rick.delaney\100home.com
831 rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
832 + perl.p5p\100rjbs.manxome.org
833 rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
834 + rjk-perl-p5p\100tamias.net
836 rjray\100redhat.com rjray\100uswest.com
837 rmgiroux\100acm.org rmgiroux\100hotmail.com
838 + mgiroux\100bear.com
839 rmbarker\100cpan.org rmb1\100cise.npl.co.uk
840 + robin.barker\100npl.co.uk
841 + rmb\100cise.npl.co.uk
842 + robin\100spade-ubuntu.(none)
843 + r.m.barker\100btinternet.com
844 + rmbarker.cpan\100btinternet.com
845 robertmay\100cpan.org rob\100themayfamily.me.uk
846 roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
847 robin\100cpan.org robin\100kitsite.com
848 roderick\100argon.org roderick\100gate.net
849 + roderick\100ibcinc.com
850 argrath\100ub32.org root\100ub32.org
851 rootbeer\100teleport.com rootbeer\100redcat.com
852 + tomphoenix\100unknown
853 rurban\100x-ray.at rurban\100cpan.org
854 + rurban\100cpanel.net
855 sartak\100bestpractical.com sartak\100gmail.com
857 sadinoff\100olf.com danny-cpan\100sadinoff.com
858 schubiger\100cpan.org steven\100accognoscere.org
859 + sts\100accognoscere.org
860 + schubiger\100gmail.com
862 schwern\100pobox.com schwern\100gmail.com
863 + schwern\100athens.arena-i.com
864 + schwern\100blackrider.aocn.com
865 + schwern\100ool-18b93024.dyn.optonline.net
866 scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
868 schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
869 + schwab\100ls5.informatik.uni-dortmund.de
870 sebastien\100aperghis.net maddingue\100free.fr
872 shigeya\100wide.ad.jp shigeya\100foretune.co.jp
873 shlomif\100cpan.org shlomif\100vipe.technion.ac.il
874 + shlomif\100iglu.org.il
875 + shlomif+processed-by-perl\100gmail.com
876 + shlomif\100shlomifish.org
877 simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
878 + simon\100brecon.co.uk
879 + simon\100othersideofthe.earth.li
880 + simon\100cozens.net
881 + simon\100netthink.co.uk
882 lannings\100who.int lannings\100gmail.com
883 + slanning\100cpan.org
884 slaven\100rezic.de slaven.rezic\100berlin.de
885 + srezic\100iconmobile.com
887 + eserte\100cs.tu-berlin.de
888 + eserte\100vran.herceg.de
889 smcc\100mit.edu smcc\100ocf.berkeley.edu
890 + smcc\100csua.berkeley.edu
892 + smccam\100uclink4.berkeley.edu
893 spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
894 + spider\100leggy.zk3.dec.com
895 + spider-perl\100orb.nashua.nh.us
896 + spider\100peano.zk3.dec.com
897 + spider.boardman\100orb.nashua.nh.us>
899 + spider.boardman\100orb.nashua.nh.us
900 + root\100peano.zk3.dec.com
901 spiros\100lokku.com s.denaxas\100gmail.com
902 spp\100ds.net spp\100psa.pencom.com
903 + spp\100psasolar.colltech.com
904 + spp\100spotter.yi.org
905 stef\100mongueurs.net stef\100payrard.net
906 + s.payrard\100wanadoo.fr
907 + properler\100freesurf.fr
908 + stef\100francenet.fr
909 stevan\100cpan.org stevan.little\100iinteractive.com
910 sthoenna\100efn.org ysth\100raven.shiftboard.com
911 sisyphus1\100optusnet.com.au sisyphus\100cpan.org
913 tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
914 tchrist\100perl.com tchrist\100mox.perl.com
915 + tchrist\100jhereg.perl.com
916 thomas.dorner\100start.de tdorner\100amadeus.net
917 tjenness\100cpan.org t.jenness\100jach.hawaii.edu
918 + timj\100jach.hawaii.edu
919 tobez\100tobez.org tobez\100plab.ku.dk
920 toddr\100cpan.org toddr\100cpanel.net
921 tom\100compton.nu thh\100cyberscience.com
922 tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
923 + tom\100amber.ssd.hcsc.com
925 vkonovalov\100lucent.com vkonovalov\100peterstar.ru
926 + konovalo\100mail.wplus.net
927 + vadim\100vkonovalov.ru
928 + vkonovalov\100spb.lucent.com
929 + vkonovalov\100alcatel-lucent.com
930 + vadim.konovalov\100alcatel-lucent.com
932 whatever\100davidnicol.com davidnicol\100gmail.com
933 wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
934 + wolfgang.laun\100thalesgroup.com
935 + wolfgang.laun\100gmail.com
936 wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
937 yath\100yath.de yath-perlbug\100yath.de