Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Perl do … while和last命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚遇到一些非常奇怪的行为,我真的无法解释:
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”,即使在$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 ENDED\n";

在两个测试中,$TEST的初始值为0.

最后的行为是…而不是在…而不是…而{…}

解决方法

一个循环修饰符的块不会被视为一个真正的循环,直到下一个,最后一个和重做.这在 perlsyn提到,在那里你会发现施文提到的关于周围环绕它的裸片,以使上一个工作.但是,下一步将不起作用,因为一个裸片只能执行一次,所以下一个像最后一样.要做下一个工作,你可以把裸机放在do里面,但是最后一个会像下一个那样做.

如果你需要下一个和最后一个工作的时候,最简单的方法是使用一个无限循环与一个继续块中的真实条件.这两个循环是等效的,除了第二个循环是一个真正的循环,所以它适用于下一个&持续:

do { ... } while condition;
while (1) { ... } conTinue { last unless condition };

大佬总结

以上是大佬教程为你收集整理的Perl do … while和last命令全部内容,希望文章能够帮你解决Perl do … while和last命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:perl命令