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