2015-03-30 63 views
1

我有一个Perl脚本,它将一个哈希转储到'output.txt'文件中。问题是,每次运行这个脚本时,同一个'output.txt'文件被覆盖。每次运行脚本时如何生成一个新的.txt文件,以便每次运行的结果都在单独的文件中?每次脚本运行时将Perl哈希转储到新的txt文件

我有这样的事情,现在我的Perl脚本的末尾:

print Dumper(\%data); 
open my $temp, '>', 'output.txt' or die $!; 
print $temp Dumper \%data; 
close $temp; 

回答

2

您可以使用时间戳作为文件名的一部分。我猜你的脚本运行速度不会超过每秒一次。

因此,而不是固定的'output.txt'使用

my $time = time; # seconds since 1970-01-01 
my $filename = "output_$time.txt"; # output_1427737784.txt 

use DateTime; 
my $now = DateTime->now; 
my $filename = "output_$now.txt"; # output_2015-03-30T17:49:16.txt 

如果你需要更多的文件名或只是不喜欢时间戳File::Temp是救援。它不仅为你创建一个随机文件名,而且还立即打开文件(防止死锁)并返回一个文件句柄。

use File::Temp 'tempfile'; 
my ($fh, $filename) = tempfile(); # replaces open() 
+0

所以,当我尝试第一种方法,我得到这个消息:“严格的裁判”,在use..what是否意味着不能使用字符串(“output_1427778835.txt”)为标志裁判? – chmod 2015-03-30 22:43:21

+0

哦,我的不好,抱歉...将使用带有时间戳的输出文件作为文件的实际名称..这就是我得到的错误消息的原因。你的建议现在可以正常工作!谢谢! :) – chmod 2015-03-30 22:49:14

+0

@丹尼尔..对同一问题的另一个扩展:有没有办法给这些输出文件的唯一名称,而不是在其名称中的时间戳? – chmod 2015-03-30 23:12:07