The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;
use File::Basename;
use File::Spec;
use IO::File;
use Mojo::UserAgent;

my $dist_ini = File::Spec->catfile(
    dirname( __FILE__ ),
    '..',
    'dist.ini',
);

my $fh = IO::File->new( $dist_ini, 'r' );

my $ua = Mojo::UserAgent->new;

my $prereqs = 0;
my @items;

while ( my $line = $fh->getline ) {
    next if !$line;
    
    ++$prereqs and next if $line =~ m{ \[ Prereqs \] }xms;
    next if !$prereqs;
    
    my ($dist) = split / = /, $line;
    
    next if !$dist;
    
    my $module = $dist;
    $dist      =~ s/::/-/g;
    
    my $res  = $ua->get( 'http://api.metacpan.org/release/' . $dist );
    my $release = $res->res->json;
    
    next if !$release;
    
    push @items, sprintf "=item * %s\n\n%s\n\n", $module, $release->{abstract};
}

my $pm_file = File::Spec->catfile(
    dirname( __FILE__ ),
    qw/.. lib Task LiveDVD/,
    'FrankfurtPM.pm',
);
my $content = do{ local (@ARGV, $/) = $pm_file; <> };

my $podheader = qq{
=head1 MODULES REQUIRED

=over 4

};
my $pod = join '', @items;
my $podend = "=back";
$content =~ s/__END__.*/__END__\n$podheader$pod$podend/s;

my $pm_fh = IO::File->new( $pm_file, 'w' );
$pm_fh->binmode( 'utf-8' );
$pm_fh->print( $content );
$pm_fh->close;