1

将序列存储在文本文件中的最佳方式是什么,或者通过 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不丢失文件锁定的情况下写回?

4

1 回答 1

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) 将负责将缓冲数据刷新到文件以及释放锁。

于 2013-08-01T18:54:59.180 回答