вырваться из подпрограммы - PullRequest
0 голосов
/ 10 января 2011

Каков наилучший способ выйти из подпрограммы и продолжить обработку остальной части сценария?

т.е.

#!/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 ]

5 голосов
/ 10 января 2011

За счет указания очевидного, лучший способ вернуться к подпрограмме - ......

return

Если в вопросе нет какой-то скрытой тонкости, которая не прояснена

Редактировать - возможно, я вижу, что вы получаете на

Если вы пишете цикл, то правильным способом выхода из цикла является использование last

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

Если вы реорганизуете это, вы можете использовать последний для выхода из подпрограммы.

    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 ...
0 голосов
/ 22 июля 2015

Не используйте выход для отмены подпрограммы, если есть вероятность, что кто-то захочет перехватить любую ошибку.Вместо этого используйте die, который может быть пойман в ловушку eval.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...