Mojo :: UserAgent非阻塞请求的“使用未初始化的值$ _”警告

时间:2018-09-09 10:27:05

标签: perl mojolicious mojo-useragent

我正在尝试通过以下方式提出非阻止请求 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;

1 个答案:

答案 0 :(得分:5)

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

代替使用此特殊变量,您需要使用在$_循环内限定范围的普通变量,以便可以将其绑定到子例程(另请参见perlfaq7中的What's a closure):

@ip