在Perl中,如何从哈希中获取任意值?

时间:2011-10-19 17:09:18

标签: perl hash

考虑一个填充的哈希:

%hash = ( ... );

我想从哈希中检索一个值;任何价值都可以。

我想避免

$arbitrary_value = (values %hash)[0];

因为我真的不想创建一个键数组,只是为了获得第一个键。

有没有办法在不生成值列表的情况下执行此操作?

注意:它不需要是随机的。任何价值都可以。

有什么建议吗?

编辑: 假设我不知道任何键。

2 个答案:

答案 0 :(得分:16)

使用each

#!/usr/bin/env perl

use strict; use warnings;

my %h = qw(a b c d e f);

my (undef, $value) = each %h;
keys %h; # reset iterator;

print "$value\n";

正如评论中所指出的,In particular, calling keys() in void context resets the iterator with no other overhead。将信息添加到This behavior has been there at least since 2003keys的文档后values

答案 1 :(得分:3)

就像练习一样,并使用Sinan提供的%h变量,以下内容适用于我:

my (undef, $val) = %h;
print $val, "\n";

当然,以下内容也有效:

print((%h)[1], "\n");

有趣的事实:看来Perl使用的方法与each使用的方法相同,但没有迭代器重置catch。