Назначение ключа из хэша в переменную - PullRequest
0 голосов
/ 29 октября 2011

У меня есть подпрограмма, которая возвращает ссылку на хэш. Я хочу получить первый ключ из этого хэша и назначить ему переменную после возврата из подпрограммы. Прямо сейчас я делаю это, и это работает, но я думаю, что должен быть умнее / проще

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 ]

3 голосов
/ 29 октября 2011

Также обратите внимание, что хотя другие ответы будут давать вам первый ключ, Perl не гарантирует порядок элементов Hash.Если вам нужен определенный порядок, сохраните отдельный список ключей и используйте его для доступа к «первому» элементу.

например:

my @fields = qw(a b c);

my $test_variable = get_value()->{$fields[0]};
2 голосов
/ 29 октября 2011
my $test_variable = (keys %{get_value()})[0];

Работа изнутри: get_value () возвращает ссылку на хеш, поэтому% {} вокруг нее разыменовывает ее как хеш, ключи которой возвращают ключи в виде массива, () [0] получает 0-й элемент из этого массив.

Однако, так как превращение хеша в список / массив дает вам элементы в ключе, порядке значений, это тоже работает:

my $test_variable = (%{get_value()})[0];
1 голос
/ 29 октября 2011

все что вам нужно это:

my($test_variable) = keys %$hash;
0 голосов
/ 30 октября 2011
my $hash = get_value(); 
keys %$hash;
my $test_variable = each %$hash;
keys %$hash;

Пустые контекстные ключи сбрасывают внутренний итератор хеша. каждый в скалярном контексте возвращает следующий ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...