ダイを使ってクリーンアップする方法はないかと思っていました。たとえば、いくつかのファイルを作成したが、プログラムが停止する必要がある状況に陥った場合は、それらを削除したい場合です。
ありがとう
ダイを使ってクリーンアップする方法はないかと思っていました。たとえば、いくつかのファイルを作成したが、プログラムが停止する必要がある状況に陥った場合は、それらを削除したい場合です。
ありがとう
ENDdieブロックは、プログラムが 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;
};