diff options
author | Leon Brocard <acme@astray.com> | 2011-06-10 21:27:29 +0100 |
---|---|---|
committer | Leon Brocard <acme@astray.com> | 2011-06-10 21:27:29 +0100 |
commit | 872fa9285df6b08c0a53ae598448a8b85b2721a8 (patch) | |
tree | db21d67ec8907fb4f2cedd4c89961716e2ddbcd2 /Porting/make_modlib_cpan.pl | |
parent | 10fc74f6910844f0e8ffd3d8c18d07166ac75de2 (diff) | |
download | perl-872fa9285df6b08c0a53ae598448a8b85b2721a8.tar.gz |
Add program which generates the list of registered CPAN sites in perlmodlib.PL
Diffstat (limited to 'Porting/make_modlib_cpan.pl')
-rwxr-xr-x | Porting/make_modlib_cpan.pl | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/Porting/make_modlib_cpan.pl b/Porting/make_modlib_cpan.pl new file mode 100755 index 0000000000..ea0878bda0 --- /dev/null +++ b/Porting/make_modlib_cpan.pl @@ -0,0 +1,91 @@ +#!perl +# +# This program generates the list of registered CPAN sites in perlmodlib.PL +# +use strict; +use warnings; +use 5.14.0; +use autodie; +use HTTP::Tiny; + +my $http = HTTP::Tiny->new; + +my $url = 'http://www.cpan.org/SITES'; +my $filename = 'SITES'; +my $response = $http->mirror( $url, $filename ); +unless ( $response->{success} ) { + die "Error downloading $url"; +} + +my $fh = IO::File->new($filename); + +while ( my $line = <$fh> ) { + chomp $line; + last + if $line eq + '[Africa] [Asia] [Australasia] [Central America] [Europe] [North America] [South America]'; +} + +my $line = <$fh>; + +say 'Registered CPAN sites'; +say ''; +say '=for maintainers'; +say 'Generated by Porting/make_modlib_cpan.pl'; +say ''; + +my $continent; +my $country; +my $state; + +while ( my $line = <$fh> ) { + chomp $line; + next if $line =~ /^\s+$/; + last if $line eq 'Feedback'; + + if ( $line =~ /^(?<continent>\w.+)$/ ) { + if ($continent) { + say ''; + if ($continent) { + say "=back"; + say ''; + } + if ( $continent eq 'North America' ) { + say "=back"; + say ''; + } + } + $continent = $+{continent}; + undef $country; + say "=head2 $continent"; + say ''; + say '=over 4'; + say ''; + } elsif ( $line =~ /^\s{3}(?<country>\w.+)$/ ) { + if ($country) { + say ''; + } + $country = $+{country}; + undef $state; + say "=item $country"; + say ''; + if ( $country eq 'United States' ) { + say '=over 8'; + say ''; + } + } elsif ( $line =~ /^\s{5}(?<state>\w.+)$/ ) { + if ($state) { + say ''; + } + $state = $+{state}; + say "=item $state"; + say ''; + } elsif ( $line =~ /^\s{22}(?<site>\w.+$)/ ) { + say " $+{site}"; + } else { + die "Unknown line: $line"; + } +} + +say ''; +say '=back'; |