2011-01-09 15 views
0

サブルーチンから抜け出す最も良い方法は何ですか&スクリプトの残りの部分の処理を続行しますか?サブルーチンの中断

サブルーチンのためにされて戻っての明白な最善の方法を述べるの犠牲に

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

'return'の何が問題なのですか? –

+0

私は知らない...それはそれが行われるはずの方法ですか? –

+1

+1匿名:) –

答えて

5

......

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" ; 
    } 

これはあなたがreturnを使用する必要がありますlastを使用していて、場所にwaningsを持っている場合は、エラーを取得する意味:いずれかがあるかどう

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

良い点。そして、後者の状況で自分自身が見つかった場合、正しい答えは、 'last if do_something()'となります。ここで、do_somethingは、 "ブレークアウト"する必要がある場合はtrueを返し、そうでない場合はfalseを返します。 – DVK

0

はサブルーチンを中止するために出口を使用しないでください誰かが何らかのエラーが発生したときにそれを捕まえたいと思う可能性があります。代わりにdieを使用してください。これは評価によってトラップできます。