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