The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

BEGIN { $^P |= 0x100 }

use WWW::Scripter;
$w = new WWW::Scripter;

use Test::More tests => 2;

sub TIESCALAR {bless[]}
tie $_, ""; # Having no FETCH or STORE method, this variable will explode
            # when touched.

# Part of target.t which used to die:
$w->get(
  q|data:text/html,<iframe src="|
 . q|data:text/html,<iframe name=crelp>|
 .q|"></iframe><a target=crelp href="data:text/html,">|
);
$w->follow_link(url_regex=>qr/data:/);
$w->frames->[0]->get('about:blank');
for my $l($w->document->links->[0]) {
 $l->href("data:text/html,czeen");
 $l->click;
}

pass('tied $_ is left alone when pages are fetched');


# Set up a cookie-producing protocol, to make sure we don’t choke on
# HTTP::Date’s local($_) when extracting cookies from the response.
use LWP'Protocol;
{
 my $year_plus_one = (localtime)[5] + 1900 + 1;
 package __;
 @ISA = LWP'Protocol;
 LWP'Protocol'implementor $'_ => __ for 'http';
 sub request {
  my($self,undef,undef,$arg) = @'_;
  my $response = new HTTP::Response 200, 'OK', [
   Content_Length=>0,
   Content_Type  =>'text/html',
                            # We use hyphens in the date to force
                            # HTTP::Date::str2time to resort to parse_date,
                            # which does local($_).
   Set_Cookie  =>"foo=bar;expires=Thu, 15-Dec-$year_plus_one 04:25:23 GMT",
  ];

  $self->collect($arg, $response, sub {\''});
 }
}

$w->request(
 # not our fault
 do { local *_; new HTTP::Request GET => 'http://www.example.com/' }
);
pass('tied $_ is left alone when pages are fetched with ->request');