A couple minor assumptions: lynx is in your path, sendmail
is in your path, you only need to know who's on top and
by how much. Why ass-u-me? lynx's dump is much easier
to parse than the source of the page.
This version without use strict; or any
errorchecking weighs in at 469 in the long form, and 429
in the most condensed form:
#!/usr/bin/perl -w
open I,"lynx -dump http://www.cnn.com/ELECTION/2000/results/FL/index.h
+tml|";
while(<I>) { @j = split; if($j[1]) {$j[1] =~ s/,//g;}
if (/Bush/) { $b = $j[1];}
elsif (/Gore/) { $g = $j[1];} }
close I; open O, ">out";
$d = abs($b-$g);
if ($b == $g) {$r="tied!\n";}
$b < $g ? $r="Gore: $d\n" : $r="Bush: $d\n";
print O "$r"; close O;
open F,"mfile"; $m = <F>; close F;
open(M,"|sendmail -t"); print M <<E;
Subject: results
Cc: $m
$r
E
close M; exit;
This one has both
use strict; and error checking
(though it does still make the above assumptions). It comes
in at 612 bytes (according to wc). When I gutted the
whitespace, it crawled in at 561 bytes.
#!/usr/bin/perl -w
use strict; my $b; my $g; my $r;
die "lynx failed\n" unless open I,"lynx -dump http://www.cnn.com/ELECT
+ION/2000/r
esults/FL/index.html|";
while(<I>) { my @j = split; if($j[1]) {$j[1] =~ s/,//g;}
if (/Bush/) { $b = $j[1];}
elsif (/Gore/) { $g = $j[1];} }
close I; open O, ">log" or die "log failed\n";
my $d = abs($b-$g);
if ($b == $g) {$r="tied!\n";}
$b < $g ? $r="Gore: $d\n" : $r="Bush: $d\n";
print O "$r"; close O;
open F,"mfile" or die "no mailfile\n"; my $m = <F>; close F;
open(M,"|sendmail -t") or die "couldn't sendmail\n"; print M <<E;
Subject: results
Cc: $m
$r
E
close M; exit;
And for sheer showing-off-ness, this is that shortest chunk:
#!/usr/bin/perl -w
open I,"lynx -dump http://www.cnn.com/ELECTION/2000/results/FL/index.h
+tml|";while(<I>){@j=split;if($j[1]){$j[1]=~s/,//g;} if(/Bush/){$b=$j[
+1];} elsif(/Gore/){$g=$j[1];}} close I;open O,">log";$d=abs($b-$g);if
+($b==$g){$r="tied!\n";} $b<$g ? $r="Gore: $d\n" : $r="Bush: $d\n";pri
+nt O "$r";close O;open F,"mfile";$m=<F>;close F;open M,"|sendmail -t"
+;print M <<E;
Subject: results
Cc: $m
$r
E
close M; exit
Heck, even if I don't win a tshirt, I'm pretty damn happy
with getting this to work at ALL!