ダイを使ってクリーンアップする方法はないかと思っていました。たとえば、いくつかのファイルを作成したが、プログラムが停止する必要がある状況に陥った場合は、それらを削除したい場合です。
ありがとう
ダイを使ってクリーンアップする方法はないかと思っていました。たとえば、いくつかのファイルを作成したが、プログラムが停止する必要がある状況に陥った場合は、それらを削除したい場合です。
ありがとう
END
die
ブロックは、プログラムが sであっても実行されます。
use File::Temp qw( tempfile );
# create "things"
my ($fh, $filename) = tempfile();
# die because of a problem
die ('a problem occured');
# clean up when dying
END { unlink $filename; }
通常の終了時にのみ何かを実行したい場合はdie
、使用できます%SIG
-ハンドラーが通常の動作を置き換えるdie
ことに注意してください。これは、自分で呼び出す必要があります。
$SIG{__DIE__} = sub {
unlink $filename;
CORE::die @_;
}
おそらく END ブロックを探しているでしょう ( perlsubを参照)。ただし、そのテーマには他にも多くのバリエーションがあります。たとえば、Guardは、クリーンアップがスコープを終了することを許可します (return、die、goto のいずれによる場合でも)。または、単純に DESTROY メソッドを使用して独自のオブジェクトを作成し、その DESTROY メソッドにクリーンアップを貼り付けます。
この特定のケースでは、File::Remove ::clean にも関心があるかもしれません。これはテスト ファイルを対象としていますが、この特定の問題も解決する可能性があります。
このテーマの別のバリエーションは、次のようなtry
/finally
ブロックですTry::Tiny
。
use Try::Tiny;
my ($fh, $filename) = tempfile();
try {
some code here...;
}
finally {
unlink $filename;
};