2011-01-09 10 views
0

Was ist der beste Weg, um aus einem Unterprogramm auszubrechen & weiterverarbeitung des Rests des Skripts?Ausbrechen eines Unterprogramms

dh

#!/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"; 

} 
+14

Was ist falsch mit 'Rückkehr'? –

+0

ich weiß nicht ... ist das so, wie es gemacht werden soll? –

+1

+1 zu Anonym :) –

Antwort

5

Auf Kosten der das Offensichtliche, der beste Weg für ein Unterprogramm der Rückkehr wird ......

return 

Es sei denn es einige versteckte Subtilität in der Frage ist, das ist nicht klar

Bearbeiten gemacht - vielleicht ich sehen, was Sie bei bekommen

Wenn Sie eine Schleife zu schreiben, dann eine gültige Art und Weise aus der Schleife des Erhaltens ist last

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

Wenn Sie diese Refactoring verwenden, können Sie mit einem mit letztem Ende aus dem Unterprogramm zu bekommen.

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

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

Das heißt, Sie last verwenden, wo Sie return verwenden sollten, und wenn Sie wanings an der richtigen Stelle erhalten Sie den Fehler:

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

Guter Punkt. Und wenn Sie sich in der letzten Situation befinden, ist die richtige Antwort, 'last' aus dem Sub zu holen:' last if do_something() 'wobei do_someth wahr zurückgibt, wenn Sie" ausbrechen "müssen und andernfalls false – DVK

0

nicht Ausfahrt Verwenden Sie ein Unterprogramm abzubrechen, wenn jeder es Chance, dass jemand den Fehler abfangen könnte. Verwenden Sie stattdessen Würfel, die von einem Eval gefangen werden können.

Verwandte Themen