我该如何使用Perl的File :: Temp?

Dav*_*d B 11 perl temporary-files

我想创建一个临时文件,写入文件句柄然后用文件名调用外部程序.

问题是我通常close在写入文件之后和调用外部程序之前想要文件,但如果我理解正确 - close一个tempfile()导致它被删除.

那么这里的解决方案是什么?

mob*_*mob 9

在关闭缓冲的情况下写入临时文件.在Perl脚本中关闭文件之前调用外部程序,外部程序将能够读取您编写的所有内容.

use File::Temp qw(tempfile);
use IO::Handle;

my ($fh, $filename) = tempfile( $template, ... );

... make some writes to $fh ...

# flush  but don't  close  $fh  before launching external command
$fh->flush;
system("/path/to/the/externalCommand --input $filename");

close $fh;
# file is erased when $fh goes out of scope
Run Code Online (Sandbox Code Playgroud)

  • 我对使用打开的文件有一种无法控制的排斥……但这似乎有效。 (2认同)

eum*_*iro 6

来自http://perldoc.perl.org/File/Temp.html:

unlink_on_destroy

Control whether the file is unlinked when the object goes out of scope. The file is removed if this value is true and $KEEP_ALL is not.

   1. $fh->unlink_on_destroy( 1 );

Default is for the file to be removed.
Run Code Online (Sandbox Code Playgroud)

尝试将其设置为0.