Perl do … while和last命令
发布时间:2020-12-15 21:41:57 所属栏目:大数据 来源:网络整理
导读:我刚刚遇到一些非常奇怪的行为,我真的无法解释: 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.pro
我刚刚遇到一些非常奇怪的行为,我真的无法解释:
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 ENDEDn"; 上面的代码不会打印“WHILE ENDED”,即使在$TEST> = 10时它似乎也在while循环中出现. 但以下代码打印“WHILE ENDED”: do { my $qry = $self->getHTMLQuery(undef,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 ENDEDn"; 在两个测试中,$TEST的初始值为0. 最后的行为是…而不是在…而不是…而{…} 解决方法
一个循环修饰符的块不会被视为一个真正的循环,直到下一个,最后一个和重做.这在
perlsyn提到,在那里你会发现施文恩提到的关于周围环绕它的裸片,以使上一个工作.但是,下一步将不起作用,因为一个裸片只能执行一次,所以下一个像最后一样.要做下一个工作,你可以把裸机放在do里面,但是最后一个会像下一个那样做.
如果你需要下一个和最后一个工作的时候,最简单的方法是使用一个无限循环与一个继续块中的真实条件.这两个循环是等效的,除了第二个循环是一个真正的循环,所以它适用于下一个&持续: do { ... } while condition; while (1) { ... } continue { last unless condition }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |