コンピュテーショナルケミストリー関連の昔のツールとかは
- インプットがファイル渡し
- アウトプットもファイルに吐く
- 中間ファイルもバコバコ吐く
- (しかもカレントディレクトリに)
とかいうのが多くて、ラッパー書くときにテンポラリ作ったり消したりしないといけなかったりして結構面倒だ。
で、File::TempとFile::chdirの組み合わせでかなり楽ができそうな感じ。
use File::chdir; $dir = tempdir( CLEANUP => 1 ); ($fh, $filename) = tempfile( DIR => $dir ); print $fh $input_data; { local $CWD = $dir; my $str = system("exec_legacy_tool_with_file -i $filename"); die $str if $str; }
これで、実行後のテンポラリのファイルとかディレクトリは自動的に消されるし、作業ディレクトリを変更してあれこれやったこともローカル化されているので、スコープ抜けるときに綺麗になるので安心。