Update perlmodlib.PL as per #13348. The L<> got
[p5sagit/p5-mst-13.2.git] / Porting / checkURL.pl
CommitLineData
6e7dc4a9 1#!/usr/bin/perl
2
3use strict;
4use warnings 'all';
5
6use LWP::Simple qw /$ua getstore/;
7use Errno;
8
9my $out = "links.out";
10my %urls;
11
12my @dummy = qw(
13 http://something.here
14 http://www.pvhp.com
15 );
16my %dummy;
17
18@dummy{@dummy} = ();
19
20foreach my $file (<pod/*.pod README README.* INSTALL>) {
21 open my $fh => $file or die "Failed to open $file: $!\n";
22 while (<$fh>) {
23 if (m{(?:http|ftp)://(?:(?!\w<)[-\w~?@=.])+} && !exists $dummy{$&}) {
24 my $url = $&;
25 $url =~ s/\.$//;
26 $urls {$url} ||= { };
27 $urls {$url} {$file} = 1;
28 }
29 }
30 close $fh;
31}
32
33my @urls = keys %urls;
34
35while (@urls) {
36 my @list = splice @urls, 0, 10;
37 my $pid;
38 my $retry;
39 my $retrymax = 3;
40 my $nap = 5;
41 do {
42 $pid = fork;
43 unless (defined $pid) {
44 if ($!{EAGAIN}) {
45 warn "Failed to fork: $!\n";
46 if ($retry++ < $retrymax) {
47 warn "(sleeping...)\n";
48 sleep $nap;
49 } else {
50 $nap *= 2;
51 $retry = 0;
52 }
53 redo;
54 } else {
55 die "Failed to fork: $!\n" unless defined $pid;
56 }
57 }
58 } until (defined $pid);
59
60 unless ($pid) {
61 # Child.
62 foreach my $url (@list) {
63 my $code = getstore $url, "/dev/null";
64 next if $code == 200;
65 my $f = join ", " => keys %{$urls {$url}};
66 printf "%03d %s: %s\n" => $code, $url, $f;
67 }
68
69 exit;
70 }
71}
72
731 until -1 == wait;
74
75
76__END__