Я только что столкнулся с очень странным поведением, которое я действительно не могу объяснить:
do {
my $qry = $self->getHTMLQuery(undef, $mech->content());
next if (!defined($qry));
push(
@prods,
map { 'http://www.XXXXYYYX.com'.$_->attr('href') }
$qry->query('div.prodInfo div.prodInfoBox a.prodLink.GridItemLink')
);
$qry->delete();
$TEST++;
last if ($TEST >= 10);
} while(eval { $mech->follow_link(class => 'jump next') });
print "WHILE ENDED\n";
Приведенный выше код никогда не печатает "WHILE ENDED", даже если кажется, что он выходит из цикла whileкогда $TEST
> = 10.
Но следующий код выдает «WHILE ENDED»:
do {
my $qry = $self->getHTMLQuery(undef, $mech->content());
next if (!defined($qry));
push(
@prods,
map { 'http://www.XXXXYYYX.com'.$_->attr('href') }
$qry->query('div.prodInfo div.prodInfoBox a.prodLink.GridItemLink')
);
$qry->delete();
$TEST++;
} while(eval { $mech->follow_link(class => 'jump next') } && $TEST <= 10);
print "WHILE ENDED\n";
В обоих тестах начальное значение $TEST
равно 0.
Отличается ли поведение last
в do...while
от поведения в for
и while {...}
?