加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 从子例程结束循环的迭代

发布时间:2020-12-15 21:52:55 所属栏目:大数据 来源:网络整理
导读:我有一个带有while循环的程序,它有几个点,某些条件需要采取某些操作,然后跳过剩余的迭代. 因为这总是相同的代码,我想把它放在子程序中,但当我尝试使用’next;’时作为子中的最后一个语句,我得到一个警告(通过下一个在……退出子程序),尽管它似乎按预期工作.
我有一个带有while循环的程序,它有几个点,某些条件需要采取某些操作,然后跳过剩余的迭代.

因为这总是相同的代码,我想把它放在子程序中,但当我尝试使用’next;’时作为子中的最后一个语句,我得到一个警告(通过下一个在……退出子程序),尽管它似乎按预期工作.

即没有子:

while (#condition) {

    ## do stuff

    if (#condition to skip iteration) {
        ## action
        next;
    }

    ## do more stuff,with the above block repeated several times
}

与子:

while (#condition) {

    ## do stuff

    &skip if (#condition to skip iteration);

    ## do more stuff,with more calls to &skip
}

sub skip() {
    ## action
    next;
}

块/子中的其余代码非常短,除了下一个之外的其他所有代码; sub中的语句几乎击败了使用子程序的对象.

我的问题是:

>正在使用’next;’以这种方式在子程序中好,还是危险/差的做法?
>有没有更好的方法从子程序跳过剩余的迭代?
>如果没有问题并且没有更好的方法,有没有办法抑制警告?

解决方法

很容易抑制警告.只需将以下行放在下一行上方:
no warnings "exiting";

警告是有原因的 – 在辅助子类中使用next可能会让下一个必须阅读代码的人感到困惑(可能是在6个月内你可能!)因为下一个不会在词法中发生循环块.如果您只是阅读循环块,您可能不会注意到文件的下一步;如果你只是阅读子程序的定义,你可能不确定接下来是什么.您需要一起阅读代码的两个部分才能理解它.这使得它比直接在循环中使用下一个更令人困惑.

此外,它限制了刚刚定义的skip()子的重新可用性.想在另一个循环中重用那个skip()子?你最好希望跳过逻辑在新循环中仍然有意义.

如果您已经考虑了所有这些并且仍然希望继续,那么只需禁用上面显示的警告.警告不是错误,它们只是警告.这就是为什么警告被称为“警告”.它们旨在引起您对可能存在问题的注意;不要阻止你做你认为有用的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读