2011-07-22 8 views
5

Korzystanie Text::Ngram mamdereferencing Perl hashrefs

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

który nie działa (Scalar found where operator expected). Myślę, że jest to kombinacja nieznajomości tego, co robię (nadal niezbyt dobre w przypadku Perla) i zmieszania co do tego, co dokładnie robię jako wynik z Text :: Ngram. Wsparcie? Chcę tylko spojrzeć na wygenerowane n-gramy:

Edytuj: Głupi błąd z mojej strony, dziękuję wszystkim.

Odpowiedz

12

Używaj nawiasów klamrowych do nieprawidłowego odniesienia hash:

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

I prawdopodobnie chcesz użyć <=> dla numerycznego sortowania zamiast ASCII-alfabetycznym sortowania cmp.

6

Użyj nawiasy klamrowe:

my %ct = %{ $c }; 
3

Nie ma potrzeby kopiowania do innego hasha, wystarczy użyć odniesienia.

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

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

Zobacz niektóre łatwe do zapamiętania zasady postępowania z referencjami.