I've used a regex as my refresh template is fixed and very, very simple. However, if yours isn't/aren't then you should replace the regex with a call to something like HTML::TokeParser.
This is actually built into WWW::Mechanize (well, LWP...) for you, so you can do something like:-
if ($mech->response and my $refresh = $mech->response->header('Refresh
+'))
{
my($delay, $uri) = split /;url=/i, $refresh;
$uri ||= $mech->uri; # No URL; reload current URL.
sleep $delay;
$mech->get($uri);
}
$delay should probably be validated to protect against malformed META refresh tags, and there's a whole other headache about potential loops if you hack WWW::Mechanize to follow refreshes automatically.