Подтвердить что ты не робот

Как определить количество элементов в ссылке на массив?

Вот ситуация, с которой я сталкиваюсь...

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

decode_json возвращает ссылку. Я уверен, что это массив. Как найти размер $perl_scalar?? Согласно документации Perl, на массивы ссылаются с помощью @name. Есть ли способ обхода?

Эта ссылка состоит из массива хэшей. Я хотел бы получить количество хешей.

Если я делаю length ($ perl_scalar), я получаю некоторое число, которое не соответствует количеству элементов в массиве.

4b9b3361

Ответ 1

Это будет:

scalar(@{$perl_scalar});

Вы можете получить дополнительную информацию от perlreftut.

Вы можете скопировать свой ссылочный массив в обычное:

my @array = @{$perl_scalar};

Но перед этим вы должны проверить, действительно ли $perl_scalar ссылается на массив, ref:

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

Обновление

Метод length не может использоваться для вычисления длины массивов, чтобы получить длину строк.

Ответ 2

Вы также можете использовать последний индекс массива для вычисления количества элементов в массиве.

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

Ответ 3

Вы можете увидеть всю структуру с помощью Data:: Dumper:

use Data::Dumper;
print Dumper $perl_scalar;

Данные:: Dumper - стандартный модуль, установленный с Perl. Полный список всех стандартных прагматик и модулей см. В разделе perldoc perlmodlib.

Ответ 4

$num_of_hashes = @{$perl_scalar};

Поскольку вы назначаете скаляр, массив разыменованных вычисляется в скалярном контексте по количеству элементов.

Если вам нужно заставить скалярный контекст, тогда сделайте так, как говорит KARASZI, и используйте функцию scalar.