Доступ к переменным элементов массива с помощью perl - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь получить доступ к конкретному члену переменной в массиве в perl.

my $array = [];
@{$array} = (
             { 'family'  => "abc", 
               'roles'   => {},
             },
             { 'family'  => "def", 
               'roles'   => {
                              'member'=>["1234"],
                            },
             },
            );

Я пытался получить доступ к значениям, используя

foreach (@{$array}){
   print " $_->{'family'} \n"; 
   #This is printing the family value 
}

Может кто-нибудь объяснить мне, как ямог получить доступ к члену field.i попытался использовать $ _-> role -> {'member'}, но это не похоже на работу.любые входные данные здесь будут очень полезны.

Я получаю следующий вывод .. Я не получаю никакой ошибки.

Hash (0x268d35) -> role -> {'memeber'}

1 Ответ

0 голосов
/ 05 февраля 2019

Попробуйте

# hash ref, key 'family' pointing to scalar
print $_->{family}, "\n";
# hash ref, key 'roles' pointing to hash ref,
#    key 'members' pointing to array ref 
print @{ $_->{roles}->{member} }, "\n";

Ваша ссылка на хеш-код интерполирована в строку, поэтому HASH(...).

Полный пример кода на основе вашего кода:

#!/usr/bin/perl
use strict;
use warnings;

my $array = [
    {
        family => "abc",
        roles  => {},
    },
    {
        family => "def",
        roles  => {
            member => ["1234"],
        },
    },
];

for my $hash_ref (@{ $array }) {
    print "family ", $hash_ref->{family}, "\n";
    while (my($key, $value) = each %{ $hash_ref->{roles} }) {
        print "role '${key}' @{ $value }\n";
    }
}

exit 0;

Тестовый прогон

$ perl dummy.pl
family abc
family def
role 'member' 1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...