小编Bro*_*ock的帖子

Storable.pm - 保存到非截断文件时损坏

在我的生产环境中,我们已经拥有了我们认为是由Storable.pm创建的腐败可存储哈希.我无法复制Dev中的行为,这使得很难准确诊断.

代码已经工作了很长时间,并且使其中断的更改是从哈希中删除.直到最近,散列要么保持相同的大小,要么增长.

该文件在readwrite中打开,然后store_fd写入该文件.由于哈希现在(有时)更小,它将写入1000字节到这个2000byte文件.尾部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);
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 这应该工作,还是我必须截断文件?
  2. 存储的哈希是否使用某种文件终止符?如果是这样,它是什么?
  3. 上面的代码,删除,添加,删除和添加,在我的测试用例中完美地运行.由于非截断文件,您能否建议任何可能导致其失败的测试用例序列?(我知道这是一个非常模糊的问题,所以请随意忽略它).

perl hash storable

9
推荐指数
1
解决办法
615
查看次数

标签 统计

hash ×1

perl ×1

storable ×1