$_
- это особая переменная, значение которой зависит от контекста. Внутри контекста foreach (@ip)
он задается как псевдоним определенного элемента в массиве @ip
. Но обратный вызов для $ua->get(...)
не выполняется в контексте foreach (@ip)
и, таким образом, $_
больше не является псевдонимом в массиве @ip
.
Вместо использования этой специальной переменной вам нужно использовать обычную переменную в области действия внутри цикла foreach (@ip)
, чтобы ее можно было связать с подпрограммой (см. Также Что такое замыкание в perlfaq7):
foreach (@ip) {
my $THIS_IS_A_NORMAL_VARIABLE = $_;
my $res= $ua->get( ... => sub {
my ($ua, $res) = @_;
print "$THIS_IS_A_NORMAL_VARIABLE =>" . $res->result->json('/net/id/desc'),"\n";
});
}