为什么我使用Mojo :: UserAgent非阻塞请求获得“使用未初始化的值$ _”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (30)

我试图用Mojo :: UserAgent做非阻塞请求但是当我运行下面的代码时我得到:“在打印行上使用未初始化的值$ _在串联(。)或字符串..”,我的问题怎么能我在回调中访问$ _?

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数组中特定项的别名。但是,get的回调$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";
   });
}

所属标签

可能回答问题的人

  • Richel

    5 粉丝0 提问6 回答
  • 人生的旅途

    10 粉丝484 提问5 回答
  • 天使的炫翼

    17 粉丝531 提问5 回答
  • 嗨喽你好

    7 粉丝480 提问4 回答

扫码关注云+社区

领取腾讯云代金券