将哈希中的密钥分配给变量

时间:2011-10-29 03:25:50

标签: perl

我有一个子例程,它返回对哈希的引用。我希望从该哈希中获取第一个键,并在子例程返回后为其分配一个变量。现在,我正在这样做,这可行,但我认为应该有一个更聪明/更容易的方式

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;   
    }
}

4 个答案:

答案 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上下文键重置哈希的内部迭代器。标量上下文中的每一个都返回下一个键。