我将从线程的哈希引用存储到共享的@stories变量,然后无法访问它们。
my @stories : shared= ();
sub blah {
my %stories : shared=();
<some code>
if ($type=~/comment/) {
$stories{"$id"}="$text";
$stories{"$id"}{type}="$type";
lock @stories;
push @stories, \%stories;
}
}
# @stories is a list of hash references which are shared from the threads;
foreach my $story (@stories) {
my %st=%{$story};
print keys %st; # <- printed "8462529653954"
print Dumper %st; # <- OK
my $st_id = keys %st;
print $st_id; # <- printed "1"
print $st{$st_id}; # <- printed "1/8"
}
打印键%st按预期工作,但当我设置变量并打印时,它返回“1”。
请你告诉我我做错了什么。 提前谢谢。
答案 0 :(得分:3)
在标量上下文中,keys %st
返回散列%st
中的元素数。
%st = ("8462529653954" => "foo");
$st_id = keys %st;
print keys %st; # "8462529653954"
print scalar(keys %st); # "1"
print $st_id; # "1"
要从%st
中提取单个密钥,请在列表上下文中从keys %st
进行分配。
my ($st_id) = keys %st; # like @x=keys %st; $st_id=$x[0]
print $st_id; # "8462529653954"