2017-01-13 5 views
-1

以下は私が持っているものです。 $url = @_を実際のURLに変更した場合は動作しますが、この例では@URLsに定義されているものからforeachを使用して読み込むはずです。誰かが私を見せたり、なぜこれがうまくいかないか教えてもらえますか?複数のURLを処理するためにNet :: Async :: HTTPの例に従ってみましたが、うまく動作しません。

#!/bin/perl 

use IO::Async::Loop; 
use Net::Async::HTTP; 
use Future::Utils qw(fmap_void); 
use URI; 

use feature 'say'; 

use strict; 
use warnings; 

my @URLs = ("http://example.com, http://example2.com"); 
my $loop = IO::Async::Loop->new(); 
my $http = Net::Async::HTTP->new(); 

$loop->add($http); 

my $future = fmap_void { 
    my $url = @_; 
    $http->GET($url)->on_done(
     sub { 
      my $response = shift; 
      say $response->content; 
     } 
    )->on_fail(
     sub { 
      my $fail = shift; 
      say $fail; 
     } 
    ); 
} 
foreach => \@URLs; 
$loop->await($future); 
+0

あなたはそれが動作していないと思うのは正確に何を見ていますか?エラーが発生した場合は、正確なエラーテキストを質問に追加してください。 – ThisSuitIsBlackNot

+0

エラーを投げることなく実行されます。しかし、私の@URLからURLを処理するはずですが、そうではありません。それは私がそれを持っている問題です。 –

+0

これは本当に正確なコードですか? '' http://example.com、http://example2.com ''は有効なURLではないので、エラーが出ると思います。 – ThisSuitIsBlackNot

答えて

1

それが配列のリストコンテキストで何をすべきかだからあなたは$url@_の項目数を割り当てています。

my ($url) = @_; 

括弧は、割り当ての左側がリストであることをPerlに伝えます。

(my $url) = @_; 

これはうまくいくが、馬鹿に見える。

+0

ああ、すみません、私はそれを逃しました。ありがとう。それはそれだった。 –

関連する問題