无法从hashref获取哈希值

时间:2013-11-14 17:28:41

标签: perl hash hashref

我将从线程的哈希引用存储到共享的@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”。

请你告诉我我做错了什么。 提前谢谢。

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"