哈希的共享Hashref可能吗?

时间:2011-09-10 23:15:01

标签: perl

我试图使用哈希的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?

1 个答案:

答案 0 :(得分:4)

This perlmonks page应该解释这个问题。其中一篇帖子声称:

  

只要内部哈希值也标记为共享,您就可以共享嵌套哈希。

您可以尝试这样的事情:

share( %t );
$status->{ $raid } = \%t;