首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >取消引用Perl散列引用

取消引用Perl散列引用
EN

Stack Overflow用户
提问于 2011-07-23 02:17:31
回答 4查看 15.3K关注 0票数 6

使用我拥有的Text::Ngram

代码语言:javascript
运行
复制
my $c = ngram_counts($text, 3);
my %ct = %($c);

这不起作用(Scalar found where operator expected)。我认为这既不知道我在做什么(仍然不太擅长使用Perl),又不清楚我从Text::Ngram得到的输出到底是什么。帮助?我只想看看生成的n-gram:

代码语言:javascript
运行
复制
my @keys = sort {$ct{$a} cmp $ct{$b} } keys %ct;
foreach my $k (@keys) {
    print "$k: $ct{$k}\n"
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-23 02:24:40

使用大括号取消对散列引用的引用:

代码语言:javascript
运行
复制
my %ct = %{ $ct };  # %$ct would also work

而且,您可能希望使用<=>来进行数值排序,而不是使用ASCII码排序cmp

票数 16
EN

Stack Overflow用户

发布于 2011-07-23 02:23:02

使用大括号:

代码语言:javascript
运行
复制
my %ct = %{ $c };
票数 7
EN

Stack Overflow用户

发布于 2011-07-23 02:41:30

没有必要复制到另一个散列中,只需使用引用即可。

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6794344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档