perl:打开文件句柄,写入其中,稍后给它命名?

标签 perl file-handling temporary-files

我想我已经在某处阅读了如何执行此操作,但我找不到在哪里。也许只有在新的(大概)版本的 Perl 中才有可能。我正在使用 5.14.2:

我有一个 Perl 脚本,如果满足某些条件,它会将结果写入文件。考虑到脚本的结构,写下结果并在稍后检查是否满足将结果保存到文件中的条件是更合乎逻辑的。

我想我在某处读到我可以将内容写入文件句柄,我猜在 Linux 中它对应于一个临时文件或某种管道,然后为该文件命名,包括所在的目录应该是,以后再说。否则,脚本完成时内容将被丢弃。

除了绕过临时文件并手动删除它们之外,在 Perl 中是否有一种直接的方法可以做到这一点?

最佳答案

您所描述的内容没有简单的 (UNIX) 功能,但行为可以由基本系统操作组成。 Perl 的 File::Temp 已经做了大部分你想要的:

use File:Temp;

my $tmp = File::Temp->new;      # Will be unlinked at end of program.

while ($work_to_do) {
  print $tmp a_lot_of_stuff();  # $tmp is a filehandle
}

if ($save_it) {
  rename($tmp, $new_file);      # $tmp is also a string.  Move (rename) the file.
}                               # If you need this to work across filesystems, you
                                # might want to ``use File::Copy qw(move)'' instead.

exit;                           # $tmp will be unlinked here if it was not renamed

关于perl:打开文件句柄,写入其中,稍后给它命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952788/

相关文章:

正则表达式:刚果共和国,但不是刚果民主共和国

perl - 为什么 Perl 会按照这种模式重新分配内存?

perl 进程队列

C编程读取文件

linux - Perl 将一段哈希值保存到一个新的哈希值中

python - 如何从文件中删除重复行并将其写入Python文件中

ruby 1.9 3 with passenger 3.0.12 - Tempfile 在尝试 rmdir 时导致 'No such file or directory' *.lock

c - Windows目录是存放临时文件的地方 - GetTempPath函数

c# - 关闭文件时删除

c - c中的文件处理代码有什么问题?