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

前端之家收集整理的这篇文章主要介绍了perl – 从子例程结束循环的迭代前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有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()子?你最好希望跳过逻辑在新循环中仍然有意义.

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

猜你在找的Perl相关文章