次の方法で Perl によって呼び出された wget からの STDOUT リターンをキャプチャして変数に入れるにはどうすればよいでしょうか?
my @urls = ('url1', 'url2', 'url3');
open(GET, "| xargs -n1 -P 3 wget -qO- ") || die "get failed: $!\n";
print GET "@urls";
すべてのデータを一度に丸呑みしたい場合は、IPC::Runでそれを行うことができます。
use IPC::Run qw(run);
run [qw(xargs -n1 -P 3 wget -qO-)], \"@urls", \my $out;
print "$out";
利用可能になったときにデータを処理したい場合は、IPC::Runもそれを行うことができます。
use IPC::Run qw(run);
run [qw(xargs -n1 -P 3 wget -qO-)], \"@urls", sub {
print $_[0];
};
まず、パイプは入力パイプであり、入力パイプopen
と出力パイプの両方をサポートしていません。別の方法として、パイプ出力を使用して、URL ごとに 1 つのファイル ハンドルを開きます。
use strict;
use warnings;
my @urls=qw(url1 url2 url3);
foreach my $url(@urls)
{
open(my $get,"-|","wget $url") or die $!;
print while(<$get>);
close($get);
}