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