为什么输出变量“$size = @keys;”数值 3 输出?(Perl)

why does outputting the variable "$size = @keys;" the numerical value 3 output?(Perl)

my %data = (-hund => 12, -katze => 14, -maus => 16, -kuh => 18);

my @keys = keys %data;
my $size = @keys;
print "$size\n";

为什么输出变量$size时显示的是键数?

这是因为标量赋值在 标量上下文 中计算右侧。一个数组 returns 它在标量上下文中的元素数。参见 perldata

@keys 在标量上下文中计算(因为它被分配给标量)。在标量上下文中评估的数组会产生其元素数。

my %data = (-hund => 12, -katze => 14, -maus => 16, -kuh => 18);

my @keys = keys %data;
my $size = @keys;         # 4

在标量上下文中计算 keys 时,它会生成所提供散列中的元素数。

my $size = keys %data;    # 4

自 5.26 起,标量上下文中的哈希生成哈希中的元素数。

my $size = %data;         # 4 (5.26+)