Отображать данные из массива объектов

Я пытаюсь отобразить данные из массива объектов, полученных с помощью API другой компании, но я получаю ошибки, когда пытаюсь использовать цикл foreach.

Я использую Dumper для отображения всего в массиве.

print Dumper($object);

Частичный выход из самосвала:

'enable_dha_thresholds' => 'false',
  'members' => [
    благослови ( {
      'ipv4addr' => '192.168.1.67',
      'name' => 'name.something.com'
    }, 'Something::Network::Member'),
    благослови ( {
      'ipv4addr' => '192.168.1.68',
      'name' => 'name.something.com'
    }, 'Something::Network::Member')
  ],
  'comment' => 'Это комментарий',

Я пытаюсь извлечь "членов", который выглядит как двойной массив:

//this works    
print $members->enable_dha_thresholds(); 

//this works
print $members[0][0]->ipv4addr; 

//does not work
foreach my $member ($members[0]){
     print "IP". $member->ipv4addr()."\n";  
}

Я получаю эту ошибку: Невозможно вызвать метод "ipv4addr" по неподтвержденной ссылке в строке./script.pl 12.

Я не уверен, что полностью понимаю "благословенный" против "необузданный" в Perl, так как я новичок в этом языке.

2 ответа

Решение

выведите $members[0][0]->ipv4addr; //это работает

поэтому $ members [0] является ссылкой на массив.
Вы должны разыменовать массив:

foreach my $member ( @{ $members[0] } ){
    print "IP". $member->ipv4addr()."\n";  
}

Ошибка, ссылающаяся на "необъявленную ссылку", говорит о том, что вы не используете объект; скорее вы предоставляете ссылку на массив, что не то же самое:)

HTH, Пол

Это проблема "ссылка на массив" против "массив". $members[0] ссылка на массив; foreach Оператор работает с массивами (или списками, чтобы быть педантичными). Вы хотите сказать

foreach my $member ( @{$members[0]} ) { ...

перебирать элементы, которые $members[0] относится к.

Синтаксис хитрый, и вы, вероятно, сделаете еще несколько ошибок с этим материалом. Соответствующие документы, чтобы помочь вам в скорости, находятся в perlref (или же perlreftut), perllol, а также perldsc а также perlobj,


Кстати, "благословенный" означает, что ссылка "знает", что это за объект и в каком пакете он должен посмотреть, какие методы он может запустить. Когда вы получаете предупреждение или ошибку "unblessed reference", это обычно означает, что вы передали что-то, что не было объектом где-то, что ожидало объект - в этом случае, $members[0] это неподтвержденная ссылка, в то время как вы намеревались передать благословенные ссылки $members[0][0], $members[0][1], так далее.

Другие вопросы по тегам