<?xml version="1.0" encoding="windows-1252"?>
<node id="495842" title="Re^5: Our Saints" created="2005-09-28 13:22:19" updated="2005-09-28 09:22:19">
<type id="11">
note</type>
<author id="352046">
ww</author>
<data>
<field name="doctext">
As modified below, works for me on w2k, (AS) perl v 5.8.6 with output to a local dir (see "MODIFY" comment, below)

&lt;code&gt;
#!C:/Perl/bin

use strict;
use warnings;

use Date::Calc qw /Today Delta_Days/;
use LWP::Simple;
use POSIX qw /strftime/;
         
# umask 022 or die "Failed to set umask: 022\n";  #umask? Not on 'doze
         
sub output;
       
my $url = 'http://www.perlmonks.org/index.pl?node_id=3559&amp;displaytype=print';
$_      = get $url or die "Failed to fetch '$url'\n";
    
my $target_dir    = "c:/__wo_ww/";     # MODIFY TO SUIT YOUR NEEDS.  was /tmp in Abigail-II's node, cited above
my $xp_file       = "$target_dir/xp.html";
my $arts_file     = "$target_dir/arts.html";
my $days_file     = "$target_dir/days.html";
my $xp_day_file   = "$target_dir/xp_day.html";
my $xp_art_file   = "$target_dir/xp_art.html";
my $art_day_file  = "$target_dir/art_day.html";

my %data;
while (m!&lt;tr[^&gt;]*&gt;
         &lt;td \s+ align="[^"]+"&gt;(\d+)&lt;/td&gt;
         &lt;td&gt;&lt;a \s+ HREF="[^"]+"&gt;([^&lt;]+)&lt;/a&gt;&lt;/td&gt;
         &lt;td \s+ align="[^"]+"&gt;(\d+)&lt;/td&gt;
         &lt;td \s+ align="[^"]+"&gt;&lt;a \s+ HREF="[^"]+"&gt;(\w+)&lt;/a&gt;&lt;/td&gt;
         &lt;td \s+ align="[^"]+"&gt;(\d+)-(\d+)-(\d+)&lt;/td&gt;!gx) {
    my ($pos, $name, $xp, $arts, $yr, $mon, $day) =

       ($1,   $2,    $3,  $4,    $5,  $6,   $7);
    $xp -= 1000000 if $name =~ /^vroom/;
    my $days = Delta_Days $yr, $mon, $day, Today;
    $data {$name} {xp}      = $xp;
    $data {$name} {arts}    = $arts =~ /None/ ? 0 : $arts;
    $data {$name} {days}    = $days;
    $data {$name} {xp_day}  = sprintf "%.2f" =&gt; $xp / $days;
    $data {$name} {xp_art}  = $arts =~ /None/ ? "999999"
                                              : sprintf "%.2f" =&gt; $xp   / $arts;
    $data {$name} {art_day} = $arts =~ /None/ ?       0
                                              : sprintf "%.2f" =&gt; $arts / $days;
}

# Rank them.
for my $field (qw /xp arts days xp_day xp_art art_day/) {
    my $new_field = "${field}_rank";
    my $count     =  0;
    foreach my $name (sort {$data {$b} {$field} &lt;=&gt;
                            $data {$a} {$field}} keys %data) {
        $data {$name} {$new_field} = ++ $count;
    }
}
    
    
output "xp",      $xp_file;
output "arts",    $arts_file;
output "days",    $days_file;
output "xp_day",  $xp_day_file;
output "xp_art",  $xp_art_file;
output "art_day", $art_day_file;
                                              
 
sub output {
    my ($key, $file) = @_;

    my @names = sort {$data {$b} {$key} &lt;=&gt; $data {$a} {$key}} keys %data;
    my $now   = strftime "%e %B %Y", localtime;
    
    open my $fh =&gt; "&gt;", $file or die "Failed to open $file: $!\n";
    print $fh &lt;&lt;"--";
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Pointless Perlmonks Saints Statistics&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
&lt;a href = "/"&gt;Home&lt;/a&gt;
&lt;a href = "./"&gt;Pointless stats&lt;/a&gt;
&lt;hr&gt;
&lt;h1&gt;Pointless Perlmonks Saints Statistics&lt;/h1&gt;
&lt;table border = 1&gt;
&lt;tr&gt;&lt;th&gt;Name&lt;/td&gt;
    &lt;th colspan = 2&gt;&lt;a href = 'arts.html'&gt;Articles&lt;/a&gt;&lt;/td&gt;
    &lt;th colspan = 2&gt;&lt;a href = 'xp.html'&gt;XP&lt;/a&gt;&lt;/td&gt;
    &lt;th colspan = 2&gt;&lt;a href = 'days.html'&gt;Days&lt;/a&gt;&lt;/td&gt;
    &lt;th colspan = 2&gt;&lt;a href = 'xp_day.html'&gt;XP per day&lt;/a&gt;&lt;/td&gt;
    &lt;th colspan = 2&gt;&lt;a href = 'xp_art.html'&gt;XP per article&lt;/a&gt;&lt;/td&gt;
    &lt;th colspan = 2&gt;&lt;a href = 'art_day.html'&gt;Articles per day&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
--
    foreach my $name (@names) {
        print $fh "&lt;tr&gt;&lt;td&gt;$name&lt;/td&gt;";
        foreach my $key (qw /arts xp days xp_day xp_art art_day/) {
            my $rank = "${key}_rank";
            print $fh "&lt;td align = 'right'&gt;$data{$name}{$key}&lt;/td&gt;" .
                      "&lt;td align = 'right'&gt;($data{$name}{$rank})&lt;/td&gt;";
        }
        print $fh "&lt;/tr&gt;\n";
    }

    print $fh &lt;&lt;"--";
&lt;/table&gt;
&lt;hr&gt;
&lt;div align = "center"&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;
Copyright 2003 by Abigail.&lt;br&gt;
Page last modified: $now&lt;/br&gt;
Comments to: \$web\$\@abigail.nl
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;&lt;/html&gt;
--
        
    close $fh or die "Failed to close $file: $!\n";
}
&lt;/code&gt;
</field>
<field name="root_node">
495809</field>
<field name="parent_node">
495833</field>
</data>
</node>
