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