出力を変数にキャプチャしようとしていますか?その場合は、適切なリダイレクトを使用してバッククックまたはqx{}
を使用してください。たとえば、あなたが使用できます。
#/usr/bin/env perl
use strict;
use warnings;
# Ensure we have a way to write messages
open my $fh, '>', "output" or die;
close(STDOUT);
close(STDERR);
my $out;
open(STDOUT, ">>", \$out) or do { print $fh, "failed to open STDOUT ($!)\n"; die };
open(STDERR, ">>", \$out) or do { print $fh, "failed to open STDERR ($!)\n"; die };
foreach my $i (1..10)
{
print "print $i\n";
warn "warn $i\n";
my $extra = qx{make pth$i 2>&1};
print $fh "<<$i>><<$out>><<$extra>>\n";
}
を(私は、ディレクトリ内のプログラムのPTH1、PTH2とpth3を持って起こる - それらがOK行われた。pth4と書き込みエラーの上には、標準エラー出力に、リダイレクトが必要でした。)
open()
などの操作の成功を常に確認する必要があります。
なぜこれが必要ですか?変数への書き込みは、書き込みを行うプロセスの協力を必要とするため、make
は協力する方法を知らないためです。
$ out。= qx {make};これは良い方法だとは思わない。 – Deck
@イスラフィル:それを行う*方法です。 –