Как определить количество элементов в ссылке на массив?
Вот ситуация, с которой я сталкиваюсь...
$perl_scalar = decode_json( encode ('utf8',$line));
decode_json возвращает ссылку. Я уверен, что это массив. Как найти размер $perl_scalar?? Согласно документации Perl, на массивы ссылаются с помощью @name. Есть ли способ обхода?
Эта ссылка состоит из массива хэшей. Я хотел бы получить количество хешей.
Если я делаю length ($ perl_scalar), я получаю некоторое число, которое не соответствует количеству элементов в массиве.
Ответы
Ответ 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
.