打破子程序

时间:2011-01-09 23:01:09

标签: perl

什么是打破子程序的最佳方法&继续处理脚本的其余部分?

#!/usr/bin/perl
use strict;
use warnings;

&mySub;

print "we executed the sub partway through & continued w/ the rest 
of the script...yipee!\n";

sub mySub{

    print "entered sub\n";

    #### Options
    #exit; # will kill the script...we don't want to use exit
    #next; # perldoc says not to use this to breakout of a sub
    #last; # perldoc says not to use this to breakout of a sub
    #any other options????

    print "we should NOT see this\n";

}

2 个答案:

答案 0 :(得分:5)

以陈述明显回归子程序的最佳方式为代价......

return

除非问题中有一些隐藏的微妙内容,否则不明确

编辑 - 也许我看到了你的目标

如果你写一个循环,那么退出循环的有效方法是使用last

    use strict ;
    use warnings ;
    while (<>) {
       last if /getout/ ;
       do_something() ;
    }

如果你重构这个,你最终可能会使用last来退出子程序。

    use strict ;
    use warnings ;
    while (<>) {
       process_line() ;
       do_something() ;
    }

    sub process_line {
       last if /getout/ ;
       print "continuing \n" ;
    }

这意味着您正在使用last,您应该使用return,如果您有游荡,则会收到错误:

Exiting subroutine via last at ..... some file ...

答案 1 :(得分:0)

如果有人可能想要捕获发生的任何错误,请不要使用exit来中止子例程。使用die代替,可以被eval捕获。