2011-05-04 32 views
12

这里是我面临的形势......如何确定数组引用中元素的数量?

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

decode_json返回引用。我相信这是一个数组。我如何找到$ perl_scalar的大小?根据Perl文档,数组是使用@name引用的。有没有解决方法?这个引用由散列数组组成。我想得到一些哈希值。

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

回答

25

这将是:

scalar(@{$perl_scalar}); 

您可以从perlreftut获得更多的信息。

您可以参考阵列复制到一个正常的是这样的:

my @array = @{$perl_scalar}; 

但在此之前,你应该检查$perl_scalar是否真的引用一个数组,ref

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

更新

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

2

你可以看到整个结构与数据::自卸车:

use Data::Dumper; 
print Dumper $perl_scalar; 

数据::翻车机是安装在Perl的标准模块。有关所有标准语用和模块的完整列表,请参阅perldoc perlmodlib

1
$num_of_hashes = @{$perl_scalar}; 

由于您将分配给标量,因此解除引用的数组将在标量上下文中评估为元素数量。

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

3

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

my $length = $#{$perl_scalar} + 1; 
相关问题