2011-05-04 8 views
12

Aquí es la situación que estoy enfrentando ...¿Cómo determino el número de elementos en una referencia de matriz?

$perl_scalar = decode_json(encode ('utf8',$line)); 

decode_json devuelve una referencia. Estoy seguro de que esto es una matriz. ¿Cómo encuentro el tamaño de $ perl_scalar? Según la documentación de Perl, las matrices se referencian utilizando @name. ¿Hay alguna solución?

Esta referencia consiste en una matriz de valores hash. Me gustaría obtener el número de hashes.

Si hago la longitud ($ perl_scalar), obtengo un número que no coincide con la cantidad de elementos en la matriz.

Respuesta

25

Eso sería:

scalar(@{$perl_scalar}); 

Usted puede obtener más información de perlreftut.

Puede copiar la matriz hace referencia a uno normal como esto:

my @array = @{$perl_scalar}; 

Pero antes de que usted debe comprobar si el $perl_scalar es realmente referencia a una matriz, con ref:

if (ref($perl_scalar) eq "ARRAY") { 
    my @array = @{$perl_scalar}; 
    # ... 
} 

Actualizar

El método length no se puede usar para calcular La longitud de las matrices, es para obtener la longitud de las cadenas.

2

se puede ver toda la estructura con datos :: Dumper:

use Data::Dumper; 
print Dumper $perl_scalar; 

Data :: Dumper es un módulo estándar que se instala con Perl. Para obtener una lista completa de todos los módulos y pragmática estándar, consulte perldoc perlmodlib.

1
$num_of_hashes = @{$perl_scalar}; 

Dado que está asignando a un escalar, la matriz desreferenciada se evalúa en un contexto escalar para la cantidad de elementos.

Si necesita forzar el contexto escalar, haga lo que dice KARASZI y use la función scalar.

3

También puede usar el último índice de la matriz para calcular la cantidad de elementos en la matriz.

my $length = $#{$perl_scalar} + 1; 
Cuestiones relacionadas