Search code examples
perlhashdereference

Dereferencing Perl hashrefs


Using Text::Ngram I have

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

which doesn't work (Scalar found where operator expected). I think this is a combination of not knowing what I'm doing (still not very good with Perl) and being confused about what exactly I'm getting as output from Text::Ngram. Help? I just want to look at the generated n-grams:

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

Edit: Stupid error on my part, thanks everyone.


Solution

  • Use curly braces to dereference the hash reference:

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

    And you probably want to use <=> for numerical sorting instead of the ASCII-betical sorting cmp.