编辑:根据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'
]
};
答案 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'}};