2017-12-10 19 views
2

私はIO::Async::Loop::EVを使用してNet::Async::HTTPでGETリクエストをやっている。この単純化スクリプトで: なぜこのperl Net :: Async :: HTTP警告が表示されますか?

use Modern::Perl '2017'; 
use IO::Async::Loop::EV; 
use Net::Async::HTTP; 
use Future; 

my $loop = IO::Async::Loop::EV->new; 
my $http = Net::Async::HTTP->new(max_redirects => 0); 
$loop->add($http); 

my $f = $http->GET('https://www.perl.org') 
->then(sub { 
     my $response = shift; 
     printf STDERR "got resp code %d\n", $response->code; 
     return Future->done; 
    }); 
$http->adopt_future($f->else_done); 

$loop->run; 

私はこの数回警告します:

EV: error in callback (ignoring): Can't call method "sysread" on an undefined value at .../IO/Async/Stream.pm line 974 

使用しているとき、私はこの警告を取得IO::Async::Loop::Event(やはりIO::Async::Stream、行974)。

ただし、非セキュア(http)リンクの場合は、すべて正常です。だからIO::Async::SSLで何かが間違っている可能性があります。 (私は別のOSでこのマシンを試したが、まだそれらの警告を受け取っている)

なぜこの警告が複数回表示されるのですか?それはあなたのマシンでも起こりますか?

+1

でのEVは、ファイル名と行番号を警告省略していますか? – choroba

+0

@チョロバ編集。警告は、IO :: Async :: Streamの行974にあります –

答えて

0

この警告はIO::Async::Loop::EV実装に固有のようです。あなただけの場合

use IO::Async::Loop; 
my $loop = IO::Async::Loop->new; 

これはうまくいくようです。あなたが特定の目的のためにそれを選んでいるのでなければ、それを避けてIO::Async::Loop->newマジックコンストラクタが良いものを見つけるようにするのが最善です。

また、

$loop->run 

でスクリプトを終了するのではなく、その代わりに、そのFutureが完了するまで、それは、ブロック待機を行い

$f->get 

を使用することができますが、その後ではないように、その後きれいに出ます。中止するには<Ctrl-C>にする必要があります。


私はIO ::非同期::ループのバグとしてこれを提起しました:: https://rt.cpan.org/Ticket/Display.html?id=124030

関連する問題