Dereferencing Perl hashrefs
15,421
Solution 1
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
.
Solution 2
Use curly braces:
my %ct = %{ $c };
Solution 3
There's no need to make a copy into another hash, just use the reference.
my $c = ngram_counts($text, 3);
my @keys = sort {$c->{$a} <=> $c->{$b} } keys %$c;
foreach my $k (@keys) {
print "$k: $c->{$k}\n"
}
See http://perlmonks.org/?node=References+quick+reference for some easy to remember rules for dealing with references.
Related videos on Youtube
Comments
-
Charles almost 2 years
Using
Text::Ngram
I havemy $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.