Отображать данные из массива объектов
Я пытаюсь отобразить данные из массива объектов, полученных с помощью 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]
, так далее.