Сохраните порядковый номер в файле и используйте flock
, чтобы убедиться, что только один процесс может получить к нему доступ:
sub set { # seed the sequence number file
my ($file, $number) = @_;
open my $fh, '>', $file;
print $fh $number;
} # implicit close
sub get {
my $file = shift;
my $incr = @_ ? shift : 1; # get($f) is like get($f,1)
open my $lock, '>>', "$file.lock";
flock $lock, 2;
open my $fh, '<', $file;
my $seq = <$fh>;
close $fh;
set($file, $seq+$incr) if $incr; # update sequence number
close $lock;
return $seq;
}
Вы можете назвать его как get($file,0)
, чтобы получить порядковый номер без его изменения..