#!/usr/bin/perl -wl use strict; use Date::Parse; my $spamfile = 'Bourque:System Folder:Eudora Folder:Mail Folder: Spam'; open SPAM, "< $spamfile" or die $!; my %mail; while () { if (/^From \Q???@???\E (.*\d{4})/) { # how Eudora delimits # my mailbox messages my @date = localtime str2time $1 or print $1, next; $date[5] += 1900; $date[4] += 1; # some mails have munged dates from Eudora, when # my clock was broken and in 1940 ... oh well $mail{$date[5]}{$date[4]}++ unless $date[5] < 1997; # go back only to first full year, 1998 $mail{$date[5]}{TOT}++ unless $date[5] < 1998; # still count "really old" spams for total $mail{TOT}++; } } my($width, $widthy, $len, $leny); for my $year (sort bynum grep !/TOT/, keys %mail) { for my $month (sort bynum grep !/TOT/, keys %{$mail{$year}}) { $width = $mail{$year}{$month} if !$width || $mail{$year}{$month} > $width; } $widthy = $mail{$year}{TOT} if !$widthy || $mail{$year}{TOT} > $width; } $len = length($width); $width /= (60 - $len); $leny = length($widthy); $widthy /= (63 - $leny); print "Spam by Month\n"; for my $year (sort bynum grep !/TOT/, keys %mail) { for my $month (sort bynum grep !/TOT/, keys %{$mail{$year}}) { printf "%4.4d-%2.2d : %${len}d : %s\n", $year, $month, $mail{$year}{$month}, '#' x ($mail{$year}{$month} / $width); } } print "\n\nSpam by Year\n"; for my $year (sort bynum grep !/TOT/, keys %mail) { next unless $mail{$year}{TOT}; printf "%4.4d : %${leny}d : %s\n", $year, $mail{$year}{TOT}, '#' x ($mail{$year}{TOT} / $widthy); } print "\n\nTotal Spam : $mail{TOT}\n"; sub bynum { $a <=> $b };