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