Perl中的threads::shared用于嵌套数据结构。

5
# thread::shared only allws a single level of shared structure
# needs a explicit hash creation for nested data structures
my %counts     : shared = ();

foreach my $state (%known_states) {
    # COUNTS
    unless (exists $counts{build}) {
        my %cb : shared;
        $counts{build} = \%cb;
    }
    $counts{build}{$state} = 0;

}

现在,我必须像上面那样做,对于每个子级哈希表,我必须明确地创建一个哈希引用。

有更好的方法吗?

附言:如果我不创建哈希引用,则会因为尝试将其用作哈希表而出现“无效的共享标量值”错误。

1个回答

6
自动化变量生成使代码更加简洁易读。
$counts{build}{$state} = 0;

表现得像
( $counts{build} //= {} )->{$state} = 0;

为了易读性,让我们把它分成两行。

$counts{build} //= {};
$counts{build}{$state} = 0;

但是就像你说的,我们需要一个共享哈希。
$counts{build} //= &share({});
$counts{build}{$state} = 0;

您可以添加以下内容,以确保您不会意外地活化未共享的变量:
no autovivification qw( fetch store exists delete );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接