我试图使用哈希的hashref来存储持久字段和更改该字段的时间戳。
它需要共享,因为我有2个线程需要访问它,尽管只有一个设置值。
这是我当前的代码,其中包含几个注释掉的变体:
my $status = {};
share($status);
sub get_status {
my($raid) = @_;
return $status->{$raid}->{status} if exists $status->{$raid};
return 1;
}
sub set_status {
my($raid,$newstatus) = @_;
my %t;
$t{status} = $newstatus;
$t{timestamp} = Time::HiRes::time;
$status->{$raid} = \%t;
#$status->{$raid} = {
#status => $newstatus,
#timestamp => Time::HiRes::time()
#};
#$status->{$raid}->{status}=$newstatus;
#$status->{$raid}->{timestamp} = Time::HiRes::time;
return 1;
}
set_status('680','1');
get_status('680');
我不断获得Invalid value for shared scalar at ./hashtest line 19.
有人可以帮忙吗:D?
答案 0 :(得分:4)
This perlmonks page应该解释这个问题。其中一篇帖子声称:
只要内部哈希值也标记为共享,您就可以共享嵌套哈希。
您可以尝试这样的事情:
share( %t );
$status->{ $raid } = \%t;