"Use of uninitialized value $_" 带有 Mojo::UserAgent 非阻塞请求的警告
"Use of uninitialized value $_" warning with a Mojo::UserAgent non-blocking request
我正在尝试发出非阻塞请求
Mojo::UserAgent
但是当我 运行 下面的代码时,我得到
Use of uninitialized value $_ in concatenation (.) or string
在 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;
$_
是一种特殊的变量,其值取决于上下文。在 foreach (@ip)
上下文中,它被设置为 @ip
数组中特定项目的别名。但是,$ua->get(...)
的回调不会在 foreach (@ip)
上下文中执行,因此 $_
不再是 @ip
数组的别名。
您需要使用 foreach (@ip)
循环内的普通变量,而不是使用这个特殊变量,以便它可以绑定到子例程(另请参阅 perlfaq7 中的 What's a closure):
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";
});
}
我正在尝试发出非阻塞请求
Mojo::UserAgent
但是当我 运行 下面的代码时,我得到
Use of uninitialized value $_ in concatenation (.) or string
在 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;
$_
是一种特殊的变量,其值取决于上下文。在 foreach (@ip)
上下文中,它被设置为 @ip
数组中特定项目的别名。但是,$ua->get(...)
的回调不会在 foreach (@ip)
上下文中执行,因此 $_
不再是 @ip
数组的别名。
您需要使用 foreach (@ip)
循环内的普通变量,而不是使用这个特殊变量,以便它可以绑定到子例程(另请参阅 perlfaq7 中的 What's a closure):
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";
});
}