he acabamos de encontrar un comportamiento muy raro que realmente no puedo explicar:Perl do ... while y última orden
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";
El código anterior imprime nunca "mientras TERMINADO" a pesar de que parece para salir del bucle mientras que cuando $TEST
> = 10.
Pero el código siguiente se imprime "mientras TERMINADO":
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";
En ambas pruebas, el valor inicial de $TEST
es 0.
¿El comportamiento de last
en do...while
es diferente que en for
y while {...}
?
Asumo la segunda vez que dicen "el código de arriba", en realidad se refiere a "el código * por debajo * " – TLP