Проблема, с которой я столкнулся, заключалась в том, что я получал эту ошибку, вызывая код на имени хоста, который возвращал несколько адресов, например www.google.com:
.
*** WARNING!!! The program has attempted to call the method
*** "address" for the following RR object:
***
*** www.google.com. 86399 IN CNAME www.l.google.com.
***
*** This object does not have a method "address". THIS IS A BUG
*** IN THE CALLING SOFTWARE, which has incorrectly assumed that
*** the object would be of a particular type. The calling
*** software should check the type of each RR object before
*** calling any of its methods.
***
*** Net::DNS has returned undef to the caller.
Эта ошибка означала, что я пытался вызвать метод адреса для объекта rr типа CNAME. Я хочу вызывать адресный метод только для rr объектов типа 'A'. В приведенном выше коде у меня нет проверок, чтобы убедиться, что я вызываю адрес для объектов типа «А». Я добавил эту строку кода (следующий, если не один), и он работает:
my (@results);
foreach my $rr ( $packet->answer ) {
next unless $rr->type eq "A";
push ( @results, $rr->address );
}
Эта строка кода пропускает следующий адрес, полученный из $packet->answer
, если тип объекта rr не равен "A".