首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >"Use of uninitialized value $_“警告与Mojo::UserAgent非阻塞请求

"Use of uninitialized value $_“警告与Mojo::UserAgent非阻塞请求
EN

Stack Overflow用户
提问于 2018-09-09 18:27:05
回答 1查看 124关注 0票数 0

我试图用Mojo::UserAgent发出一个非阻塞请求,但是当我运行下面的代码时,我得到

在串联(.)中使用未初始化值$_或字符串

print线路上。

如何在回调中访问$_

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-09 18:47:44

$_是一种特殊类型的变量,其值取决于上下文。在foreach (@ip)上下文中,它被设置为@ip数组中特定项的别名。但是,$ua->get(...)的回调不会在foreach (@ip)上下文中执行,因此$_不再是@ip数组的别名。

您不需要使用这个特殊变量,而需要使用foreach (@ip)循环内的普通变量,以便可以将其绑定到子例程(另请参阅perlfaq7中的What's a closure ):

代码语言:javascript
复制
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";
   });
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52243566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档