Я думаю, что вы хотите что-то вроде этого:
#!/usr/bin/perl
use strict;
use Fcntl ':flock';
$|++; # no buffering
my $file = "status.txt";
open my $fh, '+<', $file or die "can't open $file in update mode: $!\n";
flock($fh, LOCK_EX) or die "couldn't get lock: $!\n";
my $status = <$fh>;
chomp $status;
$status = $status ? '0' : '1';
seek $fh, 0, 0;
print $fh "$status\n";
truncate($fh, tell($fh));
#print "blocking...\n"; sleep 10;
close $fh;
Это переключит содержимое файла status.txt между 1 и 0. Обратите внимание, что я открываю файл в "обновлении"режим ", потому что мне нужно читать и писать.Если вы не сделаете это таким образом, вы можете получить условия гонки.Если вы раскомментируете строку «сна», запустите ее в одном окне, затем запустите ее второй раз в другом окне, вы увидите, что второй прогон ожидает стада, пока первый прогон не закроет файл (снятие блокировки),