2011-07-22 6 views
5

Usando Text::Ngram tengodereferencing Perl hashrefs

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

que no funciona (Scalar found where operator expected). Creo que esto es una combinación de no saber lo que estoy haciendo (aún no es muy bueno con Perl) y estar confundido acerca de lo que estoy obteniendo exactamente como resultado de Text :: Ngram. ¿Ayuda? Sólo quiero mirar el n-gramos generada:

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

Editar: error estúpido por mi parte, gracias a todos.

Respuesta

12

utilizar llaves a eliminar la referencia de la referencia a un hash:

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

Y es probable que desee utilizar <=> para la clasificación numérica en lugar del ASCII-BETICAL clasificación cmp.

6

utilizar llaves:

my %ct = %{ $c }; 
0

¿Intentaría esto?

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

No hay necesidad de hacer una copia en otro hachís, sólo tiene que utilizar la referencia.

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

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

Ver http://perlmonks.org/?node=References+quick+reference para algunos fácil de recordar reglas para tratar con referencias.