Я хотел бы использовать блокировку файлов для файлов yaml, но как получить дескриптор файла для файла yaml?
#!/usr/bin/perl
use strict;
use YAML::Syck;
use Fcntl ':flock';
use warnings;
my $cfg = YAML::Syck::LoadFile('t.yaml');
# need a handle
flock($fh, LOCK_EX) or die "couldn't get lock: $!\n";
$cfg->{a} = 1;
close $fh;
Обновление
На основев ответах я попробовал следующее, но он всегда записывает пустой неверный файл yaml.
#!/usr/bin/perl
use strict;
use YAML::Syck;
use Fcntl ':flock';
use warnings;
open my $fh, ">t.yaml";
my $cfg = YAML::Syck::LoadFile($fh);
flock($fh, LOCK_EX) or die "couldn't get lock: $!\n";
$cfg->{a} = 1;
my $yaml = YAML::Syck::Dump($cfg);
$yaml::Syck::ImplicitUnicode = 1;
print $fh $yaml . "---\n";
close $fh;