Tôi vừa mới gặp phải một số hành vi rất kỳ quặc mà tôi thực sự không thể giải thích:Perl do ... while và lệnh trước
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";
Đoạn mã trên không bao giờ in "KHI KẾT THÚC" mặc dù nó có vẻ đi ra khỏi vòng lặp while khi $TEST
> = 10
Nhưng đoạn mã sau không in "kHI KẾT THÚC":
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";
trong cả hai bài kiểm tra, các giá trị ban đầu của $TEST
là 0.
Hành vi của last
trong do...while
khác với trong for
và while {...}
?
tôi giả sử lần thứ hai bạn nói "mã ở trên", bạn thực sự có nghĩa là "mã * bên dưới * " – TLP