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