考虑一个填充的哈希:
%hash = ( ... );
我想从哈希中检索一个值;任何价值都可以。
我想避免
$arbitrary_value = (values %hash)[0];
因为我真的不想创建一个键数组,只是为了获得第一个键。
有没有办法在不生成值列表的情况下执行此操作?
注意:它不需要是随机的。任何价值都可以。
有什么建议吗?
编辑: 假设我不知道任何键。
答案 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 2003和keys的文档后values。
答案 1 :(得分:3)
就像练习一样,并使用Sinan提供的%h
变量,以下内容适用于我:
my (undef, $val) = %h;
print $val, "\n";
当然,以下内容也有效:
print((%h)[1], "\n");
有趣的事实:看来Perl使用的方法与each
使用的方法相同,但没有迭代器重置catch。