2009-09-15 5 views
2

Я написал быстрый скрипт Perl для запроса локальных DNS-серверов для IP-адреса, и у меня есть переменная, которая должна быть объявлена ​​в рамках цикла, но она, похоже, не находится в области вне цикла , Компилятор возвращает ошибкиКак я могу получить доступ к переменной вне цикла, когда я устанавливаю внутри нее внутри цикла?

 
Global Symbol "$ipAddr" requires explicit package name 

Вот код

my $resolver = Net::DNS::Resolver->new; 

my $dnsQuery = $resolver->search($hostIP[0]->getFirstChild->getData); 

if ($dnsQuery) { 
    foreach my $rr ($dnsQuery->answer) { 
     next unless $rr->type eq "A"; 
     my $ipAddr = ip2dec($rr->address); 
    } 
} 

print("::".$ipAddr); 

Как бы это было возможным объявить переменную таким образом, что будет доступен из внешней петли?

+0

mobrule есть ответ на поставленный вопрос ниже. Я бы предложил еще одно предложение для кода ... добавить «последний»; как последняя строка внутри цикла foreach. В большинстве случаев здесь это, скорее всего, не большая проблема производительности, так как в вашем ответе есть мало вероятных записей ресурсов, но хорошо, когда вы делаете то, что вам нужно делать, это хорошо, когда вы оставляете циклы. Это может реально повлиять на тяжелые циклы, которые могут выполняться миллионы раз, особенно если вы сделали это после второй итерации. В противном случае ваш код выглядит великолепно. – mikegrb

ответ

14

Поместите my $ipAddr декларацию за пределами цикла:

my $dnsQuery = $resolver->search($hostIP[0]->getFirstChild->getData); 
my $ipAddr; 
if ($dnsQuery) { 
     foreach my $rr ($dnsQuery->answer) { 
       next unless $rr->type eq "A"; 
       $ipAddr = ip2dec($rr->address); 
     } 
} 
print("::".$ipAddr); 
+0

Спасибо, я понял это вскоре после того, как отправил, но получил всевозможные ошибки, когда я попробовал это, поэтому мне было интересно, действительно ли это так. – 2009-09-15 18:44:36

+0

Если вы не используете «строгое», вы также можете просто снять «мой» – arolson101

+3

Не использовать «использовать строгое», как диск 100 MPH без ремня безопасности - очень плохая идея, если вы не уверены, что знаете что вы делаете, и если вы думаете, что знаете, что делаете, вы, вероятно, ошибаетесь. – mikegrb

Смежные вопросы