Pipe-Problem
Hallo,
ich möchte einige Zeilen Text von Perl aus einem Shell-Kommando an
dessen Standardeingabe übergeben und die Standardausgabe des
Shell-Kommandos wieder in eine Perl-Variable schreiben.
Was ich schon versucht habe:
$input = "zeile1 bla bla\nzeile2 abababab ababab\nzeile3 a b c\n";
$cmd = '/usr/bin/fmt -s -w 13';
open F, "| $cmd" or die "fork: $!";
local $SIG{PIPE} = sub { die "Pipe gebrochen" };
print F "$input";
close F or die "Pipe fehlerhaft: $! $?";
So läßt sich zwar der Input übergeben, aber die Ausgabe erfolgt über
STDOUT. Ich hätte die Ausgabe aber gerne in $output.
Mit Backticks kann ich hier wohl nicht mehr arbeiten.
Wie bekomme ich die Standardausgabe in eine Variable? Oder wie kann ich
das Problem sonst lösen?
TIA + Gruß
Til
Re: Pipe-Problem
Post removed (X-No-Archive: yes)
Re: Pipe-Problem
Post removed (X-No-Archive: yes)
Re: Pipe-Problem
Til Schubbe!
> ich möchte einige Zeilen Text von Perl aus einem Shell-Kommando an
> dessen Standardeingabe übergeben und die Standardausgabe des
> Shell-Kommandos wieder in eine Perl-Variable schreiben.
use IPC::Open2;
my $res;
{
local $/;
my $pid = open2(*R, *W, "sort");
print W "$_\n" for ('c', 'a', 'd', 'b',);
close W;
$res = <R>;
close R;
waitpid $pid, 0;
}
print $res;
Gruß
Daniel
Re: Pipe-Problem
Til Schubbe <usenet [at] lists.schubbe.org> wrote:
> ich möchte einige Zeilen Text von Perl aus einem Shell-Kommando an
> dessen Standardeingabe übergeben und die Standardausgabe des
> Shell-Kommandos wieder in eine Perl-Variable schreiben.
perldoc -q pipe
-dnh
--
Tower to pilot: "Air traffic 3 o'clock!"
Pilot to tower:" Give us another hint, we have digital watches..."