在Perl脚本中以文本文件或其他方式存储序列的最佳方法是什么。当我第一次运行脚本时,我希望序列为1并且第二次2.我还应该在多个Perl进程访问文件时处理争用。
my $seqfile = "f";
my $fh = FileHandle->new($seqfile, O_RDONLY | O_CREAT);
flock($fh, LOCK_EX);
my $seq = $fh->getline;
$seq = 0 unless($seq);
$seq = $seq + 1;
flock($fh, LOCK_UN);
如何在不丢失文件锁定的情况下写回$seq
?
答案 0 :(得分:1)
my $seqfile = "f";
my $fh = FileHandle->new($seqfile, O_RDWR | O_CREAT);
flock($fh, LOCK_EX) or die; # alternatively do loop retrying...
my $seq = $fh->getline;
$seq = 0 unless($seq);
$seq = $seq + 1;
seek ($fh, 0, SEEK_SET);
print $fh $seq;
close ($fh);
请注意,close($ fh)会将缓冲数据刷新到文件以及释放锁定。