如何确定数组引用中的元素数?

时间:2011-05-04 15:21:10

标签: perl json

这是我面临的情况......

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

decode_json返回一个引用。我相信这是一个数组。我如何找到$ perl_scalar的大小?根据Perl文档,使用@name引用数组。有解决方法吗?

此引用由一系列哈希组成。我想得到哈希的数量。

如果我做长度($ perl_scalar),我会得到一些与数组中元素数量不匹配的数字。

4 个答案:

答案 0 :(得分:28)

那将是:

scalar(@{$perl_scalar});

您可以从perlreftut获取更多信息。

您可以将引用的数组复制到这样的正常数组:

my @array = @{$perl_scalar};

但在此之前,您应该使用ref检查$perl_scalar是否确实引用了数组:

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

<强>更新

length方法不能用于计算数组的长度,而是用于获取字符串的长度。

答案 1 :(得分:3)

您还可以使用数组的最后一个索引来计算数组中的元素数。

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

答案 2 :(得分:2)

您可以使用Data :: Dumper查看整个结构:

use Data::Dumper;
print Dumper $perl_scalar;

Data :: Dumper是与Perl一起安装的标准模块。有关所有标准语用和模块的完整列表,请参阅perldoc perlmodlib

答案 3 :(得分:1)

$num_of_hashes = @{$perl_scalar};

由于您正在分配标量,因此在标量上下文中将取消引用的数组计算为元素数。

如果您需要强制标量上下文,请按照KARASZI的说法进行操作并使用scalar函数。