我有一个子例程,它返回对哈希的引用。我希望从该哈希中获取第一个键,并在子例程返回后为其分配一个变量。现在,我正在这样做,这可行,但我认为应该有一个更聪明/更容易的方式
my $hash = get_value(); # calling my subroutine here which returns a reference to a hash
foreach my $keys (keys %{$hash}) {
my $test_variable = $keys; # Assigning the first key to variable
# check if variable is not empty and exit the loop
if (!$test_variable) {
last;
}
}
答案 0 :(得分:3)
另请注意,虽然其他答案将为您提供第一个密钥,但Perl并不保证Hash元素的顺序。如果您需要特定订单,请保留单独的密钥列表,并使用此列表访问“first”元素。
e.g:
my @fields = qw(a b c);
my $test_variable = get_value()->{$fields[0]};
答案 1 :(得分:2)
my $test_variable = (keys %{get_value()})[0];
从内到外工作:get_value()返回一个哈希引用,因此围绕它的%{}将其解引用为哈希,键上的键将键作为数组返回,()[0]从中获取第0项阵列。
但是,由于将散列转换为列表/数组会为您提供按键,值顺序的项目,因此这也适用:
my $test_variable = (%{get_value()})[0];
答案 2 :(得分:1)
你需要的只是:
my($test_variable) = keys %$hash;
答案 3 :(得分:0)
my $hash = get_value();
keys %$hash;
my $test_variable = each %$hash;
keys %$hash;
Void上下文键重置哈希的内部迭代器。标量上下文中的每一个都返回下一个键。