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

25

这是我面临的情况...

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

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

这个引用包含一组哈希数组。我想获取哈希的数量。

如果我使用length($perl_scalar),我得到的数字与数组中元素的数量不匹配。


仅针对一维数组,搜索引擎喜欢*在Perl中查找数组大小*。 - Peter Mortensen
4个回答

41

那将会是:

scalar(@{$perl_scalar});

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

你可以像这样将被引用的数组复制到普通数组中:

my @array = @{$perl_scalar};

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

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

无法使用 length 方法来计算数组的长度,它是用于获取字符串的长度。


5

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

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

4
$num_of_hashes = @{$perl_scalar};

由于您正在分配给一个标量,因此取消引用的数组在标量上下文中求值为元素数量。

如果您需要强制使用标量上下文,请按照KARASZI所说使用scalar函数。


2
你可以使用Data::Dumper查看整个结构:
use Data::Dumper;
print Dumper $perl_scalar;

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接