2011-07-22 35 views
5

使用Text::Ngram提領的Perl hashrefs

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

不工作(Scalar found where operator expected)。我認爲這是一個不知道我在做什麼的組合(對於Perl還不是很好),並且對Text :: Ngram的輸出結果感到困惑。幫幫我?我只想看看生成的正克:

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

編輯:愚蠢的錯誤,我的部分,謝謝大家。

回答

12

使用大括號解引用哈希參考:

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

而且你可能想使用<=>進行數值排序,而不是ASCII-betical排序cmp

6

使用大括號:

my %ct = %{ $c }; 
0

你會試試嗎?

my $c = ngram_counts({}, $text, 3); 
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一些易於記憶的規則處理參考。