我有一个带有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()子?你最好希望跳过逻辑在新循环中仍然有意义.
如果您已经考虑了所有这些并且仍然希望继续,那么只需禁用上面显示的警告.警告不是错误,它们只是警告.这就是为什么警告被称为“警告”.它们旨在引起您对可能存在问题的注意;不要阻止你做你认为有用的事情.