Stai cercando di acquisire l'output in una variabile? In tal caso, utilizzare i backtick o qx{}
con un reindirizzamento appropriato. Ad esempio, è possibile utilizzare:
#/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";
}
(mi capita di avere programmi pth1, PTH2 e pth3 nella directory - sono state fatte su OK; pth4 e soprattutto errori di scrittura su stderr, il reindirizzamento è stato necessario.)
Si dovrebbe sempre verificare il successo di operazioni come open()
.
Perché è necessario? Perché scrivere su una variabile richiede la cooperazione del processo che fa la scrittura - e make
non sa come collaborare.
fonte
2010-12-11 06:24:30
$ out. = Qx {make}; funziona ma non penso che sia un buon modo. – Deck
@Israfil: è * il * modo di farlo. –