|
|||||||||||||||||||||||||||
"Peder H. Reuther" <sslug@sslug> writes:
> Jeg er i gang med at skrive et 'reminder'-program, der sender mig en mail
> når et eller andet skal huskes. F.eks.
Generelt med datoer, brug formatet YYYYMMDD, det vil sige at det idag
er 20010111. Det gør det muligt at sammenligne datoer præcis som om
det var heltal.
Da jeg stod i samme problem, skrev jeg følgende program, der bruger
Date::Format-modulet til at formaterer tidspunktet. Enkelt og elegant.
(Ok, at bruge tidsstemplingen på ~/.reminderrc er måske et hack)
Programmet er måske ikke helt, som jeg havde ville skrevet det
idag. Men det skulle være klart og enkelt. (Og så er det lavet primært
til at sende som SMS, hvilket gjorde at jeg bare havde brug for en
enkel kort besked.
~/.reminderrc:
# Dette er en lille test fil
#
# Først nogle datoer der er for gamle:
199801010101 Denne besked skal ikke ud.
199812121200 Det skal denne heller ikke.
#Dernæst nogle der skal ud:
199908301800 Spejderoprykning 1830 i UC
199908310700 SS forlæsning kl. 11
199908311800 BeOS foredrag i DKUUG
.../scripts/reminder.pl
#!/usr/bin/perl
# Use, modify and distribute as you like, Peter Makholm 2001
use Date::Format;
use Mail::Send;
my $reminderrc = "/home/disk13/brother/.reminderrc";
my $mailaddr = "sslug@sslug";
my @filestat = stat $reminderrc;
my $lasttime = $filestat[9];
my $thistime = time;
$then = time2str("%Y%m%e%H%M", $lasttime);
$now = time2str("%Y%m%e%H%M", $thistime);
open FH, "<$reminderrc" || die ("Couldn't open $reminderrc");
while (<FH>) {
if (/^#/) { next;
}
unless (/(\d{12})\s*(.*)/) {
warn("Unknown message format in $reminderrc");
next;
}
$messagetime = $1;
$message = $2;
if ($then < $messagetime && $messagetime <= $now) {
push @messages, $message;
}
}
close FH;
foreach $message (@messages) {
$msg = new Mail::Send Subject => $message, To => $mailaddr;
$msg->open->close;
}
utime $thistime, $thistime, $reminderrc;
|
||||||||||||||
|
||||||||||||||