Perl do… while и последняя команда

Я только что столкнулся с очень странным поведением, которое я действительно не могу объяснить:

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 when $ 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 в … пока от для и , пока {...} ?

17
задан ThisSuitIsBlackNot 18 May 2016 в 14:56
поделиться