This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: minor fixes, XXX-removal, etc.
[perl5.git] / Porting / checkAUTHORS.pl
CommitLineData
5649b9c9
NC
1#!/usr/bin/perl -w
2use strict;
8a5e2fa6 3my ($committer, $patch, $author);
cdad3b53 4use utf8;
5649b9c9 5use Getopt::Long;
7582f0f6
JV
6use Text::Wrap;
7$Text::Wrap::columns = 80;
5649b9c9 8
946fbe37
DG
9my ($rank, $ta, $ack, $who, $tap) = (0) x 5;
10my ($author_file, $percentage, $cumulative, $reverse);
11my (%authors, %untraced, %patchers, %committers, %real_names);
12
13my $result = GetOptions (
14 # modes
c673b32a
MH
15 "who" => \$who,
16 "rank" => \$rank,
946fbe37 17 "thanks-applied" => \$ta,
c673b32a
MH
18 "missing" => \$ack ,
19 "tap" => \$tap,
20
946fbe37 21 # modifiers
c673b32a
MH
22 "authors=s" => \$author_file,
23 "percentage" => \$percentage, # show as %age
24 "cumulative" => \$cumulative,
25 "reverse" => \$reverse,
00229b97 26 );
5649b9c9 27
946fbe37 28if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) {
7582f0f6
JV
29 usage();
30}
31
946fbe37 32$author_file ||= './AUTHORS';
c673b32a 33die "Can't locate '$author_file'. Specify it with '--authors <path>'."
946fbe37
DG
34 unless -f $author_file;
35
7582f0f6
JV
36my $map = generate_known_author_map();
37
946fbe37 38read_authors_files($author_file);
7582f0f6 39
7582f0f6
JV
40
41if ($rank) {
3877da06 42 parse_commits_from_stdin();
7582f0f6
JV
43 display_ordered(\%patchers);
44} elsif ($ta) {
3877da06 45 parse_commits_from_stdin();
7582f0f6 46 display_ordered(\%committers);
946fbe37 47} elsif ($tap) {
3877da06 48 parse_commits_from_stdin_authors();
7582f0f6 49 display_test_output(\%patchers, \%authors, \%real_names);
946fbe37 50} elsif ($ack) {
3877da06 51 parse_commits_from_stdin();
7582f0f6 52 display_missing_authors(\%patchers, \%authors, \%real_names);
64265e98 53} elsif ($who) {
3877da06 54 parse_commits_from_stdin();
946fbe37 55 list_authors(\%patchers, \%authors);
7582f0f6
JV
56}
57
7582f0f6
JV
58exit(0);
59
60sub usage {
61
5649b9c9 62 die <<"EOS";
946fbe37
DG
63Usage: $0 [modes] [modifiers] <git-log-output-file>
64
65Modes (use only one):
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
71
72Modifiers:
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
77
78Generate git-log-output-file with git log --pretty=fuller rev1..rev2
47e01c32 79(or pipe by specifying '-' for stdin). For example:
64265e98 80 \$ git log --pretty=fuller v5.12.0..v5.12.1 > gitlog
946fbe37 81 \$ perl Porting/checkAUTHORS.pl --rank --percentage gitlog
5649b9c9
NC
82EOS
83}
84
64265e98 85sub list_authors {
946fbe37
DG
86 my ($patchers, $authors) = @_;
87 binmode(STDOUT, ":utf8");
f229537a 88 print wrap '', '', join(', ', sort { lc $a cmp lc $b }
946fbe37 89 map { $authors->{$_} }
f229537a 90 keys %$patchers) . ".\n";
64265e98 91}
7582f0f6
JV
92
93sub parse_commits_from_stdin {
94 my @lines = split( /^commit\s*/sm, join( '', <> ) );
95 for (@lines) {
96 next if m/^$/;
97 next if m/^(\S*?)^Merge:/ism; # skip merge commits
8a5e2fa6 98 if (m/^(.*?)^Author:\s*(.*?)^AuthorDate:\s*.*?^Commit:\s*(.*?)^(.*)$/gism) {
7582f0f6
JV
99
100 # new patch
8a5e2fa6 101 ( $patch, $author, $committer ) = ( $1, $2, $3 );
7582f0f6
JV
102 chomp($author);
103 unless ($author) { die $_ }
104 chomp($committer);
105 unless ($committer) { die $_ }
106 process( $committer, $patch, $author );
107 } else {
108 die "XXX $_ did not match";
109 }
e427132c 110 }
e427132c 111
e427132c
JV
112}
113
3877da06
DM
114# just grab authors. Quicker than parse_commits_from_stdin
115
116sub parse_commits_from_stdin_authors {
117 while (<>) {
118 next unless /^Author:\s*(.*)$/;
119 my $author = $1;
120 $author = _raw_address($author);
121 $patchers{$author}++;
122 }
123}
124
e427132c 125
7582f0f6
JV
126sub generate_known_author_map {
127 my %map;
e427132c 128
7582f0f6
JV
129 my $prev = "";
130 while (<DATA>) {
131 chomp;
132 s/\\100/\@/g;
133 $_ = lc;
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;
139 }
140 }
8513229b 141
7582f0f6
JV
142 #
143 # Email addresses for we do not have names.
144 #
145 $map{$_} = "?"
146 for
147 "bah\100longitude.com",
148 "bbucklan\100jpl-devvax.jpl.nasa.gov",
149 "bilbo\100ua.fm",
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",
155 "pxm\100nubz.org",
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
48f3d0c6 163 "snaury\100gmail.com", # Reported cpan ticket 35943, with patch for fix
7582f0f6
JV
164 ;
165
166 #
167 # Email addresses for people that don't have an email address in AUTHORS
168 # Presumably deliberately?
169 #
170
171 $map{$_} = '!' for
172
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",
179
180 # Iain Truskett has passed away (2003-12-29).
181 "perl\100dellah.anu.edu.au", "spoon\100dellah.org", "spoon\100cpan.org",
182
183 # Ton Hospel
184 "me-02\100ton.iguana.be", "perl-5.8.0\100ton.iguana.be", "perl5-porters\100ton.iguana.be",
185
186 # Beau Cox
187 "beau\100beaucox.com",
188
189 # Randy W. Sims
190 "ml-perl\100thepierianspring.org",
191
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",
201 "unknown",
202 "unknown\100unknown",
203 "unknown\100longtimeago",
204 "unknown\100perl.org",
205 "",
206 "(none)",
207 ;
208
209 return \%map;
210}
e427132c 211
7582f0f6
JV
212sub read_authors_files {
213 my @authors = (@_);
214 return unless (@authors);
946fbe37 215 my (%count, %raw);
7582f0f6
JV
216 foreach my $filename (@authors) {
217 open FH, "<$filename" or die "Can't open $filename: $!";
60d42009 218 binmode FH, ':encoding(UTF-8)';
7582f0f6
JV
219 while (<FH>) {
220 next if /^\#/;
221 next if /^-- /;
946fbe37 222 if (/^([^<]+)<([^>]+)>/) {
7582f0f6 223 # Easy line.
946fbe37
DG
224 my ($name, $email) = ($1, $2);
225 $name =~ s/\s*\z//;
226 $raw{$email} = $name;
227 $count{$email}++;
cdad3b53 228 } elsif (/^([-A-Za-z0-9 .\'À-ÖØöø-ÿ]+)[\t\n]/) {
7582f0f6
JV
229
230 # Name only
231 $untraced{$1}++;
232 } elsif ( length $_ ) {
233 chomp;
234 warn "Can't parse line '$_'";
235 } else {
236 next;
237 }
238 }
8513229b 239 }
7582f0f6 240 foreach ( keys %raw ) {
946fbe37
DG
241 print "E-mail $_ occurs $count{$_} times\n" if $count{$_} > 1;
242 my $lc = lc $_;
243 $authors{ $map->{$lc} || $lc } = $raw{$_};
7582f0f6 244 }
946fbe37 245 $authors{$_} = $_ for qw(? !);
8513229b
A
246}
247
7582f0f6
JV
248sub display_test_output {
249 my $patchers = shift;
250 my $authors = shift;
251 my $real_names = shift;
252 my $count = 0;
3877da06 253 printf "1..%d\n", scalar keys %$patchers;
7582f0f6 254 foreach ( sort keys %$patchers ) {
3877da06 255 $count++;
7582f0f6
JV
256 if ($authors->{$_}) {
257 print "ok $count - ".$real_names->{$_} ." $_\n";
258 } else {
259 print "not ok $count - Contributor not found in AUTHORS: $_ ".($real_names->{$_} || '???' )."\n";
260 }
8513229b 261
7582f0f6 262 }
5649b9c9
NC
263}
264
e427132c 265sub display_missing_authors {
7582f0f6
JV
266 my $patchers = shift;
267 my $authors = shift;
e427132c 268 my $real_names = shift;
7582f0f6
JV
269 my %missing;
270 foreach ( sort keys %$patchers ) {
271 next if $authors->{$_};
272
273 # Sort by number of patches, then name.
274 $missing{ $patchers{$_} }->{$_}++;
275 }
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";
282 }
5649b9c9 283 }
5649b9c9
NC
284}
285
286sub display_ordered {
7582f0f6
JV
287 my $what = shift;
288 my @sorted;
289 my $total;
290
291 while ( my ( $name, $count ) = each %$what ) {
292 push @{ $sorted[$count] }, $name;
293 $total += $count;
294 }
295
296 my $i = @sorted;
297 return unless @sorted;
298 my $sum = 0;
299 foreach my $i ( $reverse ? 0 .. $#sorted : reverse 0 .. $#sorted ) {
300 next unless $sorted[$i];
301 my $prefix;
302 $sum += $i * @{ $sorted[$i] };
303
304 # Value to display is either this one, or the cumulative sum.
305 my $value = $cumulative ? $sum : $i;
306 if ($percentage) {
307 $prefix = sprintf "%6.2f:\t", 100 * $value / $total;
308 } else {
309 $prefix = "$value:\t";
310 }
311 print wrap ( $prefix, "\t", join( " ", sort @{ $sorted[$i] } ), "\n" );
15b8f96d 312 }
5649b9c9
NC
313}
314
315sub process {
7582f0f6
JV
316 my ( $committer, $patch, $author ) = @_;
317 return unless $author;
318 return unless $committer;
319
320 $author = _raw_address($author);
321 $patchers{$author}++;
322
323 $committer = _raw_address($committer);
324 if ( $committer ne $author ) {
325
326 # separate commit credit only if committing someone else's patch
327 $committers{$committer}++;
328 }
5649b9c9
NC
329}
330
00229b97
JV
331sub _raw_address {
332 my $addr = shift;
333 my $real_name;
350bd8f1 334 if ($addr =~ /(?:\\?")?\s*\(via RT\) <perlbug-followup\@perl\.org>$/p) {
08dc3bc8 335 my $name = ${^PREMATCH};
e529a387 336 $addr = 'perlbug-followup@perl.org';
08dc3bc8
A
337 #
338 # Try to find the author
339 #
ac664a5e
DR
340 if (exists $map->{$name}) {
341 $addr = $map->{$name};
342 $real_name = $authors{$addr};
343 }
344 else {
345 while (my ($email, $author_name) = each %authors) {
346 if ($name eq $author_name) {
347 $addr = $email;
348 $real_name = $name;
349 last;
350 }
08dc3bc8
A
351 }
352 }
353 }
354 elsif ( $addr =~ /<.*>/ ) {
7582f0f6
JV
355 $addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/;
356 $real_name = $1;
00229b97 357 }
5a528087
CB
358 $addr =~ s/\[mailto://;
359 $addr =~ s/\]//;
00229b97 360 $addr = lc $addr;
e427132c 361 $addr = $map->{$addr} || $addr;
7582f0f6 362 $addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
5e8353a0 363
7582f0f6 364 if ($real_name) { $real_names{$addr} = $real_name }
00229b97
JV
365 return $addr;
366}
367
5649b9c9 368
8513229b
A
369__DATA__
370
371#
372# List of mappings. First entry the "correct" email address, as appears
373# in the AUTHORS file. Second is any "alias" mapped to it.
374#
a695a9ef 375# If the "correct" email address is a '+', the entry above it is reused;
8513229b
A
376# this for addresses with more than one alias.
377#
378# Note that all entries are in lowercase. Further, no '@' signs should
379# appear; use \100 instead.
380#
381#
382# Committers.
383#
384adi enache\100rdslink.ro
385alanbur alan.burlison\100sun.com
386+ alan.burlison\100uk.sun.com
00229b97
JV
387+ aburlison\100cix.compulink.co.uk
388ams ams\100toroid.org
389+ ams\100wiw.org
8513229b 390chip chip\100pobox.com
00229b97
JV
391+ chip\100perl.com
392+ salzench\100nielsenmedia.com
393+ chip\100atlantic.net
394+ chip\100rio.atlantic.net
395+ salzench\100dun.nielsen.com
3bf51dad 396+ chip\100ci005.sv2.upperbeyond.com
8513229b
A
397craigb craig.berry\100psinetcs.com
398+ craig.berry\100metamorgs.com
399+ craig.berry\100signaltreesolutions.com
400+ craigberry\100mac.com
a94e4597 401+ craig.a.berry\100gmail.com
e82692ac 402+ craig a. berry)
8513229b
A
403davem davem\100fdgroup.com
404+ davem\100iabyn.nospamdeletethisbit.com
a94e4597 405+ davem\100iabyn.com
8513229b
A
406+ davem\100fdgroup.co.uk
407+ davem\100fdisolutions.com
408+ davem\100iabyn.com
409demerphq demerphq\100gmail.com
410+ yves.orton\100de.mci.com
411+ yves.orton\100mciworldcom.de
745b54e4 412+ yves.orton\100booking.com
00229b97
JV
413+ demerphq\100dromedary.booking.com
414+ demerphq\100gemini.(none)
415+ demerphq\100camel.booking.com
416+ demerphq\100hotmail.com
8513229b 417doughera doughera\100lafayette.edu
00229b97
JV
418+ doughera\100lafcol.lafayette.edu
419+ doughera\100fractal.phys.lafayette.edu
420+ doughera.lafayette.edu
421+ doughera\100newton.phys.lafayette.edu
422
8513229b 423gbarr gbarr\100pobox.com
00229b97
JV
424+ bodg\100tiuk.ti.com
425+ gbarr\100ti.com
426+ graham.barr\100tiuk.ti.com
e82692ac 427+ gbarr\100monty.mutatus.co.uk
8513229b
A
428gisle gisle\100activestate.com
429+ gisle\100aas.no
00229b97
JV
430+ aas\100aas.no
431+ aas\100bergen.sn.no
8513229b
A
432gsar gsar\100activestate.com
433+ gsar\100cpan.org
00229b97 434+ gsar\100engin.umich.edu
8513229b
A
435hv hv\100crypt.compulink.co.uk
436+ hv\100crypt.org
00229b97 437+ hv\100iii.co.uk
8513229b
A
438jhi jhi\100iki.fi
439+ jhietaniemi\100gmail.com
440+ jhi\100kosh.hut.fi
00229b97 441+ jhi\100alpha.hut.fi
8513229b 442+ jhi\100cc.hut.fi
fda5b70a 443+ jhi\100hut.fi
8513229b 444+ jarkko.hietaniemi\100nokia.com
00229b97 445+ jarkko.hietaniemi\100cc.hut.fi
63d7924f 446+ jarkko.hietaniemi\100booking.com
00229b97
JV
447jesse jesse\100bestpractical.com
448+ jesse\100fsck.com
449+ jesse\100perl.org
8513229b
A
450merijn h.m.brand\100xs4all.nl
451+ h.m.brand\100hccnet.nl
452+ merijn\100l1.procura.nl
e82692ac 453+ merijn\100a5.(none)
8513229b 454mhx mhx-perl\100gmx.net
e82692ac 455+ mhx\100r2d2.(none)
93456aa7
JV
456mst mst\100shadowcat.co.uk
457+ matthewt\100hercule.scsys.co.uk
8513229b
A
458nicholas nick\100unfortu.net
459+ nick\100ccl4.org
460+ nick\100talking.bollo.cx
461+ nick\100plum.flirble.org
462+ nick\100babyhippo.co.uk
463+ nick\100bagpuss.unfortu.net
e82692ac 464+ nick\100babyhippo.com
93456aa7 465+ nicholas\100dromedary.ams6.corp.booking.com
e82692ac 466+ Nicholas Clark (sans From field in mail header)
8513229b
A
467pudge pudge\100pobox.com
468rgs rgarciasuarez\100free.fr
469+ rgarciasuarez\100mandrakesoft.com
470+ rgarciasuarez\100mandriva.com
471+ rgarciasuarez\100gmail.com
472+ raphel.garcia-suarez\100hexaflux.com
12feb466 473+ rgs@consttype.org
8513229b
A
474sky sky\100nanisky.com
475+ artur\100contiller.se
476+ arthur\100contiller.se
86e2f329
S
477smueller 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
03c4920e
SH
487steveh steve.m.hay\100googlemail.com
488+ stevehay\100planit.com
b692cd7a 489+ steve.hay\100uk.radan.com
8513229b
A
490stevep steve\100fisharerojo.org
491+ steve.peters\100gmail.com
e82692ac 492+ root\100dixie.cscaper.com
00229b97
JV
493timb Tim.Bunce\100pobox.com
494+ tim.bunce\100ig.co.uk
87ff2bbe
TC
495tonyc tony\100develop-help.com
496+ tony\100openbsd32.tony.develop-help.com
a2d496af 497+ tony\100saturn.(none)
8513229b
A
498
499#
500# Mere mortals.
501#
00229b97 502\043####\100juerd.nl juerd\100cpan.org
212682ea 503+ juerd\100c3.convolution.nl
00229b97 504+ juerd\100convolution.nl
00229b97 505a.r.ferreira\100gmail.com aferreira\100shopzilla.com
8513229b 506abe\100ztreet.demon.nl abeltje\100cpan.org
00229b97 507abela\100hsc.fr abela\100geneanet.org
8513229b
A
508abigail\100abigail.be abigail\100foad.org
509+ abigail\100abigail.nl
00229b97 510+ abigail\100fnx.com
e82692ac 511aburt\100isis.cs.du.edu isis!aburt
00229b97 512ach\100mpe.mpg.de ach\100rosat.mpe-garching.mpg.de
e82692ac 513adavies\100ptc.com alex.davies\100talktalk.net
8513229b 514ajohnson\100nvidia.com ajohnson\100wischip.com
e82692ac 515+ anders\100broadcom.com
8513229b 516alexm\100netli.com alexm\100w-m.ru
a94e4597 517alex-p5p\100earth.li alex\100rcon.rog
00229b97 518alexmv\100mit.edu alex\100chmrr.net
8513229b 519alian\100cpan.org alian\100alianwebserver.com
00229b97
JV
520allen\100grumman.com allen\100gateway.grumman.com
521allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
e82692ac 522+ nort\100qnx.com
8513229b 523allens\100cpan.org easmith\100beatrice.rutgers.edu
e82692ac 524+ root\100dogberry.rutgers.edu
00229b97
JV
525andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
526+ andreas.koenig.7os6vvqr\100franz.ak.mind.de
8513229b 527+ a.koenig\100mind.de
00229b97
JV
528+ k\100anna.in-berlin.de
529+ andk\100cpan.org
530+ koenig\100anna.mind.de
531+ k\100anna.mind.de
e82692ac
MB
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
8513229b
A
538anno4000\100lublin.zrz.tu-berlin.de anno4000\100mailbox.tu-berlin.de
539+ siegel\100zrz.tu-berlin.de
25b68122 540apocal@cpan.org perl\1000ne.us
e82692ac
MB
541arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
542+ gatech!skeeve!arnold
7dbe2044 543arodland\100cpan.org andrew\100hbslabs.com
e82692ac 544arussell\100cs.uml.edu adam\100adam-pc.(none)
8513229b
A
545ash\100cpan.org ash_cpan\100firemirror.com
546avarab\100gmail.com avar\100cpan.org
547
00229b97
JV
548bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
549+ bailey\100genetics.upenn.edu
e82692ac 550+ bailey.charles\100gmail.com
8513229b 551bah\100ecnvantage.com bholzman\100longitude.com
e82692ac
MB
552barries\100slaysys.com root\100jester.slaysys.com
553bkedryna\100home.com bart\100cg681574-a.adubn1.nj.home.com
00229b97 554bcarter\100gumdrop.flyinganvil.org q.eibcartereio.=~m-b.{6}-cgimosx\100gumdrop.flyinganvil.org
8513229b 555ben_tilly\100operamail.com btilly\100gmail.com
e82692ac
MB
556+ ben_tilly\100hotmail.com
557ben\100morrow.me.uk mauzo\100csv.warwick.ac.uk
558+ mauzo\100.(none)
559bepi\100perl.it enrico.sorcinelli\100gmail.com
560bert\100alum.mit.edu bert\100genscan.com
93456aa7 561bigbang7\100gmail.com ddascalescu+github\100gmail.com
f8a89dce 562blgl\100stacken.kth.se blgl\100hagernas.com
6fd0ab63 563+ 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com
d203773f 564brian.d.foy\100gmail.com bdfoy\100cpan.org
e82692ac 565BQW10602\100nifty.com sadahiro\100cpan.org
ac664a5e 566bulk88\100hotmail.com bulk88
8513229b 567
4bba85d0 568chad.granum\100dreamhost.com exodist7\100gmail.com
4d88742b 569choroba\100cpan.org choroba\100weed.(none)
8513229b 570chromatic\100wgz.org chromatic\100rmci.net
201da6ff 571ckuskie\100cadence.com colink\100perldreamer.com
040d2336 572claes\100surfar.nu claes\100versed.se
e82692ac 573clintp\100geeksalad.org cpierce1\100ford.com
8513229b 574clkao\100clkao.org clkao\100bestpractical.com
00229b97 575corion\100corion.net corion\100cpan.org
8513229b
A
576cp\100onsitetech.com publiustemp-p5p\100yahoo.com
577+ publiustemp-p5p3\100yahoo.com
578cpan\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
e82692ac 584cpan\100ton.iguana.be me-01\100ton.iguana.be
d203773f 585crt\100kiski.net perl\100ctweten.amsite.com
8513229b 586
e82692ac 587dairiki\100dairiki.org dairiki at dairiki.org
fda5b70a 588dagolden\100cpan.org xdaveg\100gmail.com
895db057 589damian\100conway.org damian\100cs.monash.edu.au
00229b97
JV
590dan\100sidhe.org sugalsd\100lbcc.cc.or.us
591+ sugalskd\100osshe.edu
e82692ac 592daniel\100bitpusher.com daniel\100biz.bitpusher.com
8513229b 593david.dyck\100fluke.com dcd\100tc.fluke.com
9d1ee727
KW
594david\100justatheory.com david\100wheeler.net
595+ david\100kineticode.com
596+ david\100wheeler.com
e82692ac 597+ david\100wheeler.net
3bf51dad 598dennis\100booking.com dennis\100camel.ams6.corp.booking.com
6439ee77 599+ dennis.kaarsemaker\100booking.com
a4d824de 600+ dennis\100kaarsemaker.net
d203773f 601dev-perl\100pimb.org knew-p5p\100pimb.org
5a528087 602+ lists-p5p\100pimb.org
e82692ac 603djberg86\100attbi.com djberg96\100attbi.com
09c3cef4 604dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org
8513229b 605domo\100computer.org shouldbedomo\100mac.com
00229b97 606+ domo\100slipper.ip.lu
e82692ac 607+ domo\100tcp.ip.lu
00229b97
JV
608dougm\100covalent.net dougm\100opengroup.org
609+ dougm\100osf.org
e82692ac
MB
610dougw\100cpan.org doug_wilson\100intuit.com
611dwegscheid\100qtm.net wegscd\100whirlpool.com
612edwardp\100excitehome.net epeschko\100den-mdev1
613+ epeschko\100elmer.tci.com
614+ esp5\100pge.com
00229b97 615egf7\100columbia.edu efifer\100sanwaint.com
e82692ac 616eggert\100twinsun.com eggert\100sea.sm.unisys.com
8513229b
A
617
618fugazi\100zyx.net larrysh\100cpan.org
e82692ac 619+ lshatzer\100islanddata.com
8513229b 620
e82692ac 621gbacon\100itsc.uah.edu gbacon\100adtrn-srv4.adtran.com
d203773f 622gerberb\100zenez.com root\100devsys0.zenez.com
e82692ac
MB
623gfuji\100cpan.org g.psy.va\100gmail.com
624gerard\100ggoossen.net gerard\100tty.nl
fda5b70a
JV
625gibreel\100pobox.com stephen.zander\100interlock.mckesson.com
626+ srz\100loopback
b9ff0c49 627gideon\100cpan.org gidisrael\100gmail.com
00229b97 628gnat\100frii.com gnat\100prometheus.frii.com
8513229b
A
629gp\100familiehaase.de gerrit\100familiehaase.de
630grazz\100pobox.com grazz\100nyc.rr.com
d203773f 631gward\100ase.com greg\100bic.mni.mcgill.ca
a22ececd
AHA
632haggai\100cpan.org alanhaggai\100alanhaggai.org
633+ alanhaggai\100gmail.com
00229b97
JV
634hansmu\100xs4all.nl hansm\100icgroup.nl
635+ hansm\100icgned.nl
636+ hans\100icgned.nl
b5e2dde1 637+ hans\100icgroup.nl
00229b97 638+ hansm\100euronet.nl
e82692ac 639+ hansm\100euro.net
8513229b 640hio\100ymir.co.jp hio\100hio.jp
e82692ac 641hops\100sco.com hops\100scoot.pdev.sco.com
8513229b 642
74314d7a 643ian.goodacre\100xtra.co.nz ian\100debian.lan
e82692ac 644ingo_weinhold\100gmx.de bonefish\100cs.tu-berlin.de
c07671d7 645
e82692ac
MB
646james\100mastros.biz theorb\100desert-island.me.uk
647jand\100activestate.com jan.dubois\100ibm.net
8513229b
A
648japhy\100pobox.com japhy\100pobox.org
649+ japhy\100perlmonk.org
650+ japhy\100cpan.org
e82692ac 651+ jeffp\100crusoe.net
8513229b 652jari.aalto\100poboxes.com jari.aalto\100cante.net
e82692ac
MB
653jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
654jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
655jbuehler\100hekimian.com jhpb\100hekimian.com
656jcromie\100100divsol.com jcromie\100cpan.org
8513229b
A
657+ jim.cromie\100gmail.com
658jdhedden\100cpan.org jerry\100hedden.us
659+ jdhedden\1001979.usna.com
660+ jdhedden\100gmail.com
661+ jdhedden\100yahoo.com
e82692ac
MB
662+ jhedden\100pn100-02-2-356p.corp.bloomberg.com
663jeremy\100zawodny.com jzawodn\100wcnet.org
d203773f 664jesse\100sig.bsh.com jesse\100ginger
8513229b 665jfriedl\100yahoo.com jfriedl\100yahoo-inc.com
e82692ac 666jfs\100fluent.com jfs\100jfs.fluent.com
fd548ba4
FC
667jhannah\100mutationgrid.com jay\100jays.net
668+ jhannah\100omnihotels.com
669jidanni\100jidanni.org jidanni\100hoffa.dreamhost.com
8513229b 670jjore\100cpan.org twists\100gmail.com
dfe12d64
JK
671jkeenan\100cpan.org jkeen\100verizon.net
672+ jkeenan\100dromedary-001.ams6.corp.booking.com
fda5b70a
JV
673jns\100integration-house.com jns\100gellyfish.com
674+ gellyfish\100gellyfish.com
e82692ac
MB
675john\100atlantech.com john\100titanic.atlantech.com
676john\100johnwright.org john.wright\100hp.com
677joseph\100cscaper.com joseph\1005sigma.com
678joshua\100rodd.us jrodd\100pbs.org
679jtobey\100john-edwin-tobey.org jtobey\100user1.channel1.com
9feb1316 680jpeacock\100messagesystems.com john.peacock\100havurah-software.org
fda5b70a 681+ jpeacock\100havurah-software.org
e82692ac 682+ jpeacock\100dsl092-147-156.wdc1.dsl.speakeasy.net
feaafc86 683+ jpeacock\100jpeacock-hp.doesntexist.org
05ddb96b 684+ jpeacock\100cpan.org
9feb1316 685+ jpeacock\100rowman.com
277c21af 686jpl.jpl\100gmail.com jpl\100research.att.com
d203773f 687jql\100accessone.com jql\100jql.accessone.com
e82692ac 688jsm28\100hermes.cam.ac.uk jsm28\100cam.ac.uk
8513229b
A
689
690kane\100dwim.org kane\100xs4all.net
691+ kane\100cpan.org
692+ kane\100xs4all.nl
693+ jos\100dwim.org
694+ jib\100ripe.net
60d42009 695keith.s.thompson\100gmail.com kst\100mib.org
00229b97 696ken\100mathforum.org kenahoo\100gmail.com
e82692ac 697+ ken.williams\100thomsonreuters.com
31a15f36 698kentfredric\100gmail.com kentnl\100cpan.org
8513229b 699kroepke\100dolphin-services.de kay\100dolphin-services.de
78d25b6c
JV
700kst\100mib.org kst\100cts.com
701+ kst\100SDSC.EDU
8513229b 702kstar\100wolfetech.com kstar\100cpan.org
00229b97 703+ kurt_starsinic\100ml.com
e82692ac
MB
704+ kstar\100www.chapin.edu
705+ kstar\100chapin.edu
00229b97
JV
706larry\100wall.org lwall\100jpl-devvax.jpl.nasa.gov
707+ lwall\100netlabs.com
708+ larry\100netlabs.com
709+ lwall\100sems.com
710+ lwall\100scalpel.netlabs.com
e82692ac
MB
711laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu
712+ ml1050\100freemail.hu
946fbe37 713lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu
00229b97 714+ d-lewart\100uiuc.edu
84ad9c6c 715lkundrak\100v3.sk lubo.rintel\100gooddata.com
e82692ac
MB
716lstein\100cshl.org lstein\100formaggio.cshl.org
717+ lstein\100genome.wi.mit.edu
84ad9c6c 718l.mai\100web.de plokinom\100gmail.com
e82692ac
MB
719lupe\100lupe-christoph.de lupe\100alanya.m.isar.de
720lutherh\100stratcom.com lutherh\100infinet.com
721mab\100wdl.loral.com markb\100rdcf.sm.unisys.com
00229b97 722marcel\100codewerk.com gr\100univie.ac.at
06fdbb00 723+ hanekomu\100gmail.com
9d0e037a 724marcgreen\100cpan.org marcgreen\100wpi.edu
d4cb306b 725markleightonfisher\100gmail.com fisherm\100tce.com
e82692ac
MB
726mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com
727marnix\100gmail.com pttesac!marnix!vanam
88048be8 728marty+p5p\100kasei.com marty\100martian.org
8513229b
A
729mats\100sm6sxl.net mats\100sm5sxl.net
730mbarbon\100dsi.unive.it mattia.barbon\100libero.it
731mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu
e82692ac
MB
732me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu
733merijnb\100iloquent.nl merijnb\100ms.com
734+ merijnb\100iloquent.com
d203773f 735merlyn\100stonehenge.com merlyn\100gadget.cscaper.com
d5564dc4 736mestre.smash\100gmail.com smash\100cpan.org
8513229b 737mgjv\100comdyn.com.au mgjv\100tradingpost.com.au
e82692ac 738mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com
8513229b
A
739michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de
740mike\100stok.co.uk mike\100exegenix.com
e7613a67 741miyagawa\100bulknews.net miyagawa\100edge.co.jp
8513229b 742mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk
e82692ac 743mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl
fda5b70a 744moritz\100casella.verplant.org moritz\100faui2k3.org
e82692ac 745+ moritz lenz
fda5b70a 746
e82692ac 747neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu
d203773f 748neeracher\100mac.com neeri\100iis.ee.ethz.ch
e82692ac 749neil\100bowers.com neilb\100cre.canon.co.uk
20b15ed1 750
8513229b
A
751nospam-abuse\100bloodgate.com tels\100bloodgate.com
752+ perl_dummy\100bloodgate.com
00229b97 753
e82692ac
MB
754ian.phillipps\100iname.com ian_phillipps\100yahoo.co.uk
755+ ian\100dial.pipex.com
00229b97 756ignasi.roca\100fujitsu-siemens.com ignasi.roca\100fujitsu.siemens.es
e82692ac 757ikegami\100adaelis.com eric\100fmdev10.(none)
d203773f 758ilmari\100ilmari.org ilmari\100vesla.ilmari.org
e82692ac 759illpide\100telecel.pt arbor\100al37al08.telecel.pt
20b15ed1
JV
760# see http://www.nntp.perl.org/group/perl.perl5.porters/2001/01/msg28925.html
761#
a94e4597
S
762ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
763+ nospam-abuse\100ilyaz.org
e82692ac 764+ [9]ilya\100math.ohio-state.edu
d203773f 765ilya\100martynov.org ilya\100juil.nonet
8513229b 766
31febfb6
FC
767joshua.pritikin\100db.com joshua\100paloalto.com
768
9fcef2a0
FC
769litt\100acm.org tlhackque\100yahoo.com
770
3b8d3bda
FC
771meyering@asic.sc.ti.com jim\100meyering.net
772
00229b97 773okamoto\100corp.hp.com okamoto\100hpcc123.corp.hp.com
e82692ac 774orwant\100oreilly.com orwant\100media.mit.edu
00229b97 775
8513229b
A
776p5-authors\100crystalflame.net perl\100crystalflame.net
777+ rs\100crystalflame.net
00229b97
JV
778+ coral\100eekeek.org
779+ coral\100moonlight.crystalflame.net
780+ rs\100oregonnet.com
93456aa7 781+ rs\100topsy.com
8513229b 782paul.green\100stratus.com paul_greenvos\100vos.stratus.com
e82692ac 783+ pgreen\100seussnt.stratus.com
8513229b
A
784paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
785+ paul.marquess\100ntlworld.com
786+ paul.marquess\100openwave.com
00229b97
JV
787+ pmarquess\100bfsec.bt.co.uk
788+ pmqs\100cpan.org
e82692ac
MB
789+ paul\100paul-desktop.(none)
790Pavel.Zakouril\100mff.cuni.cz root\100egg.karlov.mff.cuni.cz
8513229b 791pcg\100goof.com schmorp\100schmorp.de
00229b97 792perl\100cadop.com cdp\100hpescdp.fc.hp.com
e82692ac 793perl\100greerga.m-l.org greerga\100m-l.org
00229b97
JV
794perl\100profvince.com vince\100profvince.com
795perl-rt\100wizbit.be p5p\100perl.wizbit.be
8513229b 796# Maybe we should special case this to get real names out?
946fbe37 797Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
fda5b70a 798# NOTE: There is an intentional trailing space in the line above
00229b97 799pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
e82692ac 800+ upf\100de.uu.net
36a4e1d1
NC
801ribasushi@cpan.org rabbit\100rabbit.us
802+ rabbit+bugs\100rabbit.us
d6abd0a3 803perl\100aaroncrane.co.uk arc\100cpan.org
8513229b
A
804phil\100perkpartners.com phil\100finchcomputer.com
805pimlott\100idiomtech.com andrew\100pimlott.net
e82692ac
MB
806+ pimlott\100abel.math.harvard.edu
807pixel\100mandriva.com pixel\100mandrakesoft.com
8513229b
A
808pne\100cpan.org philip.newton\100gmx.net
809+ philip.newton\100datenrevision.de
810+ pnewton\100gmx.de
00229b97 811pprymmer\100factset.com pvhp\100forte.com
3eab96ca
KW
812khw\100cpan.org khw\100karl.(none)
813+ public\100khwilliamson.com
e82692ac 814+ khw\100khw-desktop.(none)
8513229b
A
815
816radu\100netsoft.ro rgreab\100fx.ro
549122ae 817rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
00229b97 818raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
117a8c22
RB
819module@renee-baecker.de renee.baecker\100smart-websolutions.de
820+ reneeb\100reneeb-desktop.(none)
a7f7a167 821+ github@renee-baecker.de
2bacf451 822+ otrs\100ubuntu.(none)
524cd813 823+ perl\100renee-baecker.de
f157ad77 824richard.foley\100rfi.net richard.foley\100t-online.de
8513229b 825+ richard.foley\100ubs.com
f157ad77 826+ richard.foley\100ubsw.com
8513229b
A
827rick\100consumercontact.com rick\100bort.ca
828+ rick.delaney\100rogers.com
a94e4597 829+ rick\100bort.ca
e82692ac 830+ rick.delaney\100home.com
4bc69901 831rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
e82692ac 832+ perl.p5p\100rjbs.manxome.org
8513229b
A
833rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
834+ rjk-perl-p5p\100tamias.net
ec36440e 835+ rjk\100tamias.net
e82692ac 836rjray\100redhat.com rjray\100uswest.com
8513229b 837rmgiroux\100acm.org rmgiroux\100hotmail.com
e82692ac 838+ mgiroux\100bear.com
a94e4597
S
839rmbarker\100cpan.org rmb1\100cise.npl.co.uk
840+ robin.barker\100npl.co.uk
00229b97 841+ rmb\100cise.npl.co.uk
5b2081f5 842+ robin\100spade-ubuntu.(none)
b2061475 843+ r.m.barker\100btinternet.com
34c029c7 844+ rmbarker.cpan\100btinternet.com
00229b97 845robertmay\100cpan.org rob\100themayfamily.me.uk
d203773f 846roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
00229b97
JV
847robin\100cpan.org robin\100kitsite.com
848roderick\100argon.org roderick\100gate.net
e82692ac 849+ roderick\100ibcinc.com
3560ee4d 850argrath\100ub32.org root\100ub32.org
8513229b 851rootbeer\100teleport.com rootbeer\100redcat.com
e82692ac 852+ tomphoenix\100unknown
3bf51dad 853rurban\100x-ray.at rurban\100cpan.org
080d4cd3 854+ rurban\100cpanel.net
c0e9ef6a 855sartak\100bestpractical.com sartak\100gmail.com
a3d8b840 856+ code\100sartak.org
ed429a63 857sadinoff\100olf.com danny-cpan\100sadinoff.com
8513229b
A
858schubiger\100cpan.org steven\100accognoscere.org
859+ sts\100accognoscere.org
00229b97 860+ schubiger\100gmail.com
f273d1e7 861+ stsc\100refcnt.org
8513229b 862schwern\100pobox.com schwern\100gmail.com
8ed05479
MS
863+ schwern\100athens.arena-i.com
864+ schwern\100blackrider.aocn.com
865+ schwern\100ool-18b93024.dyn.optonline.net
e82692ac
MB
866scotth\100sgi.com author scotth\100sgi.com 842220273 +0000
867+ schotth\100sgi.com
868schwab\100suse.de schwab\100issan.informatik.uni-dortmund.de
869+ schwab\100ls5.informatik.uni-dortmund.de
8513229b
A
870sebastien\100aperghis.net maddingue\100free.fr
871+ saper\100cpan.org
1048cfac 872shigeya\100wide.ad.jp shigeya\100foretune.co.jp
917cc27d
SF
873shlomif\100cpan.org shlomif\100vipe.technion.ac.il
874+ shlomif\100iglu.org.il
ff47f462 875+ shlomif+processed-by-perl\100gmail.com
be235cc1 876+ shlomif\100shlomifish.org
8513229b
A
877simon\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
cd799e5a
SL
882lannings\100who.int lannings\100gmail.com
883+ slanning\100cpan.org
8513229b 884slaven\100rezic.de slaven.rezic\100berlin.de
a94e4597 885+ srezic\100iconmobile.com
00229b97 886+ srezic\100cpan.org
e82692ac
MB
887+ eserte\100cs.tu-berlin.de
888+ eserte\100vran.herceg.de
8513229b
A
889smcc\100mit.edu smcc\100ocf.berkeley.edu
890+ smcc\100csua.berkeley.edu
00229b97 891+ alias\100mcs.com
fda5b70a 892+ smccam\100uclink4.berkeley.edu
8513229b
A
893spider\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
fda5b70a
JV
897+ spider.boardman\100orb.nashua.nh.us>
898+ spidb\100cpan.org
e82692ac
MB
899+ spider.boardman\100orb.nashua.nh.us
900+ root\100peano.zk3.dec.com
1ea085fc 901spiros\100lokku.com s.denaxas\100gmail.com
00229b97 902spp\100ds.net spp\100psa.pencom.com
fda5b70a
JV
903+ spp\100psasolar.colltech.com
904+ spp\100spotter.yi.org
8513229b
A
905stef\100mongueurs.net stef\100payrard.net
906+ s.payrard\100wanadoo.fr
e82692ac
MB
907+ properler\100freesurf.fr
908+ stef\100francenet.fr
cdabe908 909stevan\100cpan.org stevan.little\100iinteractive.com
e82692ac 910sthoenna\100efn.org ysth\100raven.shiftboard.com
8b2d7fd7 911sisyphus1\100optusnet.com.au sisyphus\100cpan.org
8513229b
A
912
913tassilo.parseval\100post.rwth-aachen.de tassilo.von.parseval\100rwth-aachen.de
e82692ac
MB
914tchrist\100perl.com tchrist\100mox.perl.com
915+ tchrist\100jhereg.perl.com
916thomas.dorner\100start.de tdorner\100amadeus.net
917tjenness\100cpan.org t.jenness\100jach.hawaii.edu
918+ timj\100jach.hawaii.edu
919tobez\100tobez.org tobez\100plab.ku.dk
2fe8fc10 920toddr\100cpan.org toddr\100cpanel.net
e82692ac
MB
921tom\100compton.nu thh\100cyberscience.com
922tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
923+ tom\100amber.ssd.hcsc.com
924
925vkonovalov\100lucent.com vkonovalov\100peterstar.ru
926+ konovalo\100mail.wplus.net
927+ vadim\100vkonovalov.ru
928+ vkonovalov\100spb.lucent.com
929+ vkonovalov\100alcatel-lucent.com
058a5f6c 930+ vadim.konovalov\100alcatel-lucent.com
e82692ac
MB
931
932whatever\100davidnicol.com davidnicol\100gmail.com
933wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at
934+ wolfgang.laun\100thalesgroup.com
935+ wolfgang.laun\100gmail.com
64698074 936wolfsage\100gmail.com mhorsfall\100darmstadtium.(none)
e82692ac 937yath\100yath.de yath-perlbug\100yath.de
691b316a 938