В моей производственной среде у нас было то, что мы считаем поврежденный хранимый хеш, созданный Storable.pm. Я не могу воспроизвести поведение в Dev, что затрудняет точную диагностику.
Код работает давно, и внесенные в него изменения break удалялся из хеша. До недавнего времени хеш остался того же размера или вырос.
Файл открывается в режиме чтения и записи, а затем store_fd записывает в файл. Поскольку хэш теперь (иногда) меньше, он будет записывать, скажем, 1000 байт в этот файл размером 2000 байт. Последние 1000 байт - старые, мусорные данные. В моем тестовые случаи, когда я получаю хэш, данные мусора игнорируются, так как ожидается.
open( $sf, "+< $self->{mod_state_filename}" );
flock( $sf, LOCK_EX );
$self->{mod_state} = fd_retrieve($sf);
delete ($self->{mod_state}{"somekey"});
seek( $sf, 0, 0 );
store_fd( $self->{mod_state}, $sf );
flock( $sf, LOCK_UN )
close($sf);
Мои вопросы: