没有键名的Perl哈希值

Ωme*_*ega 0 perl hash

Perl是否可以访问哈希值,如果它只有一个键,而不使用键值?

让我们说,%h只是'key_name' => 'value'.

我可以访问'value'唯一的通道$h->{key_name}吗?

或者,可以在'value'没有密钥名称的情况下访问它吗?

Eri*_*rom 13

内置函数散列将返回所有的散列值的列表.您可以使用它来获取或设置的任何值与别名列表构造,如foreach,mapgrep:

for my $value (values %hash) {
    say $value;  # prints the value
    $value++;    # adds one to the value
}
Run Code Online (Sandbox Code Playgroud)

或者您可以将值存储在数组中:

my @vals = values %hash;
Run Code Online (Sandbox Code Playgroud)

返回值的顺序实际上是随机的,但它与相应keys函数的顺序相同.

散列本身是列表,因此您可以访问列表上下文中散列的任何奇数元素以获取该值,但此方法的效率较低,因为整个散列需要拆分以形成列表,而不仅仅是值.

上述技术适用于任何大小的哈希.如果您只有一个键/值对:

my %hash = qw(foo bar);
Run Code Online (Sandbox Code Playgroud)

然后他们减少到:

{my ($x) = values %hash;    say $x} # bar
{my (undef, $x) = %hash;    say $x} # bar
{my $x = (values %hash)[0]; say $x} # bar
{my $x = (%hash)[1];        say $x} # bar
Run Code Online (Sandbox Code Playgroud)