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