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 YAML qw(LoadFile);

push @ARGV, 'deps.yml' unless @ARGV;
my $deps_file = shift;
-f $deps_file or die "usage: mkreport [deps.yml]\n";
my $deps = LoadFile($deps_file);

my $report = 'report.html';
my $num = 30;

my @biggest_users = sort {
        scalar keys %{$deps->{$b}{prereqs}} <=> scalar keys %{$deps->{$a}{prereqs}} 
    } keys %$deps;

my @most_popular = sort {
        $deps->{$b}{score} <=> $deps->{$a}{score}
    } keys %$deps;

open(OUT, '>', $report) or die "can't write '$report': $!";

print OUT <<'HTML';
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<!-- Metainformation -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="en" />
<title>CPAN::Dependency Results</title>
<!-- Stylesheets -->
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
<h1>CPAN::Dependency Results</h1>

<p>This page is generated by running the script <i>eg/mkreport</i> 
using the file <i>deps.yml</i>, which contains the dependency tree. 
<i>deps.yml</i> itself can be generated either by running the script 
<i>eg/find_deps</i> then <i>eg/score</i>, or by running the script 
<i>eg/cpants</i> using the CPANTS database. </p>

<p>It's only here to show some of the information you can 
gather using <code>CPAN::Dependency</code>. </p>

<table id="by_score" class="board">
<caption>Distributions sorted by score</caption>
<thead>
  <tr><th>Distribution</th> <th>Score</th></tr>
</thead>
<tbody>
HTML

my $row = <<'ROW';
  <tr>
    <td><a href="http://search.cpan.org/dist/%s" 
        title="Read the documentation of this distribution on Search CPAN"
      >%s</a> [<a href="http://cpan.uwinnipeg.ca/dist/%s"
        title="Read the documentation of this distribution on Kobesearch"
      >mirror</a>]
      <div class="popup %s"><div><strong>%s</strong> %s</div></div>
    </td>
    <td>%d</td>
</tr> 
ROW

for my $dist (@most_popular[0..$num-1]) {
    printf OUT $row, $dist, $dist, $dist, 
        'used-by', "Used by:", join(', ', sort keys %{$deps->{$dist}{used_by}}), 
        $deps->{$dist}{score}
}

print OUT <<'HTML';
</tbody>
</table>

<table id="by_prereqs" class="board">
<caption>Distributions sorted by number of prerequisites</caption>
<thead>
  <tr><th>Distribution</th> <th>Prereqs</th></tr>
</thead>
<tbody>
HTML

for my $dist (@biggest_users[0..$num-1]) {
    printf OUT $row, $dist, $dist, $dist, 
        'prereqs', "Prerequisites:", join(', ', sort keys %{$deps->{$dist}{prereqs}}), 
        scalar keys %{ $deps->{$dist}{prereqs} }
}

my $date = localtime((stat($deps_file))[9]);
print OUT <<"HTML";
</tbody>
</table>

<p style="clear: both"></p>

<p>Generated using data as of $date. </p>

</body>
</html>
HTML

close(OUT);