Q :q // Q :qq // Q :regex // Q :subst /// Q :trans ///
####
q// qq// qr// s/// tr///
####
#! perl -slw
use strict;
use LWP::Simple;
our $area ||= 1040;
my $url = "http://www.bbc.co.uk/weather/5day.shtml?id=$area";
our $f;
my $html = $f
? do{ local( $/, @ARGV ) = ( undef, 'weather.failed' ); <> }
: get $url or die "Failed to get html: $!, $?, $^E"
;
my $reTag = qr[< [^>]+ > \s*? ]x;
my( $place, $state, $temp, $wDir, $wSpeed, $humid, $press, $updown, $vis,
$lat, $long, $date, $time, $TZ, $other #
) = $html =~ m[
5\sDay\sForecast\sin\sCelsius\sfor\s+ ( [^<]+ ) .+?
Current\s+Nearest\s+Observations $reTag : $reTag+
( [^<]+ ) $reTag \s+ ( \d+ ) .+?
( [NSEWA/]+ ) \s+ \( ( \d+ ) .+?
Relative\s+Humidity .+? : \s+ ( \d+ ) .+?
Pressure .+? : \s+ ( \d+ ), \s+ ( \S+ ) , .+?
Visibility .+? : \s+ ( [^<]+ )
.+?
Latitude $reTag : \s+ ( [\d.-]+ ) , .+?
Longitude $reTag : \s+ ( [\d.-]+ ) \. .+?
Observed $reTag : \s+ ( .+? ) \s+ at \s+
$reTag ( \S+ ) \s+ $reTag
\( $reTag ( [A-Z]+ )
# ( .{100} )
]smx or warn 'Regex failed!' and getstore $url, 'weather.failed';
print <<EOP;
For: $place
Sky: $state
Temp: $temp
Wind Direction: $wDir Speed: $wSpeed
Humidity: $humid%
Pressure: $press $updown
Visibility: $vis
Latitude: $lat
Longitude: $long
Observed: $date $time $TZ
EOP