散列内的数组大小

时间:2014-05-29 13:31:17

标签: perl

编辑:根据mppac的需求提供代码:

我希望哈希中的数组长度。

为什么以下显示undef?

$ >cat test.pl
#!/usr/bin/perl

use Data::Dumper;

my %static_data_key = (
'NAME' =>['RAM','SHYAM','RAVI','HARI'],
);
print Dumper(\%static_data_key);

$ >./test.pl
$VAR1 = {
'NAME' => [
'RAM',
'SHYAM',
'RAVI',
'HARI'
]
};

2 个答案:

答案 0 :(得分:2)

标量上下文中Perl数组的返回值是数组的大小。例如:

my @array = ( 'a', 'b', 'c' );
my $size = @array;
print "$size\n";

此代码将打印'3'。取消引用时,匿名数组共享此特征:

my $aref = [ 'a', 'b', 'c' ];
print $aref, "\n";   # ARRAY(0x1e33148)... useless in this case.
my $size = @{$aref}; # Dereference $aref, in scalar context.
print "$size\n";     # 3

我正在演示的代码采取了一些不必要的步骤来提高清晰度。现在考虑一下:

print scalar @{[ 'a', 'b', 'c']}, "\n";  # 3

这里我们构建一个匿名数组并立即取消引用它。我们在标量上下文中获得它的返回值,恰好是3。

最后,让我们将该匿名数组放入哈希:

my %hash = ( 
  NAME => [ 'joseph', 'frank', 'pete' ]
);

print scalar @{$hash{NAME}}, "\n";

从中间向外读取最后一行;首先,我们获得NAME%hash元素存储的值。这是对匿名数组的引用。所以我们用@{ ..... }取消引用它。我们使用scalar来强制标量上下文。输出为3。

答案 1 :(得分:1)

#!/usr/bin/perl
# your code goes here
use strict;
use warnings;
my %static_data_key = (
'NAME' =>['RAM','SHYAM','RAVI','HARI'],
);
print scalar @{$static_data_key{'NAME'}};

Demo