http://www.perlmonks.org?node_id=154954
Description: I bought an account with www.wunderground.com so I don't feel guilty making requests through an agent... my $weather = weather (95017); print "$weather\n";

sub weather
  {
  my $zip = shift;
  my $url = shift;

  $url = $url || "http://www.wunderground.com/cgi-bin/findweather/getF
+orecast?query=$zip";

  my $out = &www_slurp ($url);

  $out =~ s/\r//g;
  $out =~ s/\n//g;

  my ($temp) = $out =~ /<td>Temperature<\/td><td><b>(\d+)/m;
  my ($cond) = $out =~ /<td>Conditions<\/td><td><b>([^<]+)</m;
  my ($sunrise, $t) = $out =~ /<td>Sunrise<\/td><td><b> (\d+:\d+) (AM|
+PM)/m;
  my ($sunset, $tt) = $out =~ /<td>Sunset<\/td><td><b> (\d+:\d+) (AM|P
+M)/m;
  my ($location) = $out =~ /<title>Weather Underground: ([^<]+)</m;
  $location =~ s/ Forecast$//;
  my ($gay, $tonight) = $out =~ /<b>(Monday|Tuesday|Wednesday|Thursday
+|Friday|Saturday|Sunday|Today|Tonight|Overnight|Now)<\/b><br>([^<]+)<
+/;

  $tonight =~ s/&&//g;
  $tonight =~ s/\s+$//;

  return "" if (! $temp);

  my $now = time;
  my @now = split //, $now;

  my $str = "$location: $cond, $temp" .
    "F, $tonight" .
    ($sunrise && $t ? " sunrise at $sunrise $t" : "") .
    ($sunset && $tt ? ", sunset at $sunset $tt." : "");

  $str =~ s/\s+/ /g;
  return $str;
  }