首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Storable.pm -保存到非截断文件时损坏

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

Stack Overflow用户
提问于 2010-11-24 01:02:33
回答 2查看 730关注 0票数 9

在我的生产环境中,我们有一个我们认为是腐败的、可存储的散列,由Storable.pm创建。我无法在Dev中复制这种行为,这使得我很难准确诊断。

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

该文件在readwrite中打开,然后store_fd将写入该文件。由于散列现在(有时)较小,它将向这个2000字节文件写入1000个字节。尾1000字节是旧的垃圾数据。在我的测试用例中,当我检索哈希时,垃圾数据会像预期的那样被忽略。

代码语言:javascript
复制
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);

我的问题:

  1. 应该工作吗,还是我必须截断文件?
  2. 存储的散列是否使用某种文件终止符?如果是这样的话,它是什么呢?
  3. 上面的代码,删除、添加、删除和添加,在我的测试用例中非常有效。您能否建议任何测试用例序列,因为非截断的文件可能导致它失败?(我知道这是一个非常模糊的问题,所以请随意忽略它)。
EN

回答 2

Stack Overflow用户

发布于 2010-12-03 00:21:56

我不知道Storable处理拖尾垃圾的能力有多好,但是肯定不会有什么坏处

代码语言:javascript
复制
truncate $sf, tell($sf);

在调用store_fd之后,消除了人们对于它现在和将来是否能够处理它的所有疑问。

票数 1
EN

Stack Overflow用户

发布于 2010-12-03 04:18:54

抱歉我以为我更新了这个。

我问了五个搬运工,得到了这个问题的答案。

我还没有实现修复,因为我无法在测试中复制,所以我不想推进到我的生产env,我的工作是暂时更安全。

根据perl5搬运工的回答,截断绝对是个好主意。

我不知道有人有(或可能!)悬赏我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4262584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档