我正在尝试通过以下方式提出非阻止请求
Mojo::UserAgent
但是当我运行下面的代码时,我得到了
在串联(。)或字符串中使用未初始化的值$ _
在print
行上。
如何在回调中访问$_
?
my $ua = Mojo::UserAgent->new();
my @ids = qw( id1 id2 id3 );
foreach ( @ids ) {
my $res = $ua->get('http://my_site/rest/id/'.$_.'.json' => sub {
my ($ua, $res) = @_;
print "$_ => " . $res->result->json('/net/id/desc'), "\n";
});
}
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
答案 0 :(得分:5)
null
是一种特殊的变量,其值取决于上下文。在ownerId
上下文中,它被设置为$_
数组中特定项目的别名。但是,foreach (@ip)
的回调不会在@ip
上下文中执行,因此$ua->get(...)
不再是foreach (@ip)
数组的别名。
代替使用此特殊变量,您需要使用在$_
循环内限定范围的普通变量,以便可以将其绑定到子例程(另请参见perlfaq7中的What's a closure):
@ip