¿Está buscando capturar la salida en una variable? En caso afirmativo, debe utilizar los puntos suspensivos o qx{}
con la redirección adecuada. Por ejemplo, podría utilizar:
#/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";
}
(me sucede que tiene programas PTH1, PTH2 y pth3 en el directorio - que se hicieron bien; pth4 y por encima de errores de escritura en stderr; la reorientación era necesario.)
Siempre debe verificar el éxito de operaciones tales como open()
.
¿Por qué es esto necesario? Debido a que escribir en una variable requiere la cooperación del proceso de escritura, y make
no sabe cómo cooperar.
$ out. = Qx {make}; funciona pero no creo que sea una buena manera. – Deck
@Israfil: es * la * forma de hacerlo. –