解除引用Perl hashrefs

时间:2011-07-22 18:17:31

标签: perl hash dereference

使用Text::Ngram我有

my $c = ngram_counts($text, 3);
my %ct = %($c);

不起作用(Scalar found where operator expected)。我认为这是一个不知道我在做什么(仍然不是很好用Perl)和对我从Text :: Ngram输出的确切内容感到困惑的组合。救命?我只想看看生成的n-gram:

my @keys = sort {$ct{$a} cmp $ct{$b} } keys %ct;
foreach my $k (@keys) {
    print "$k: $ct{$k}\n"
}

编辑:我的愚蠢错误,谢谢大家。

4 个答案:

答案 0 :(得分:13)

使用花括号取消引用哈希引用:

my %ct = %{ $ct };  # %$ct would also work

您可能希望使用<=>进行数字排序,而不是使用ASCII-betical排序cmp

答案 1 :(得分:6)

使用花括号:

my %ct = %{ $c };

答案 2 :(得分:3)

没有必要将副本复制到另一个哈希中,只需使用引用。

my $c = ngram_counts($text, 3);

my @keys = sort {$c->{$a} <=> $c->{$b} } keys %$c;
foreach my $k (@keys) {
    print "$k: $c->{$k}\n"
}

请参阅http://perlmonks.org/?node=References+quick+reference,了解一些易于记忆的处理引用的规则。

答案 3 :(得分:0)

你会试试吗?

my $c = ngram_counts({}, $text, 3);