这是我面临的情况......
$perl_scalar = decode_json( encode ('utf8',$line));
decode_json返回一个引用。我相信这是一个数组。我如何找到$ perl_scalar的大小?根据Perl文档,使用@name引用数组。有解决方法吗?
此引用由一系列哈希组成。我想得到哈希的数量。
如果我做长度($ perl_scalar),我会得到一些与数组中元素数量不匹配的数字。
答案 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
函数。