Pipe-Problem

Pipe-Problem

am 19.02.2007 05:21:00 von Til Schubbe

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

am 19.02.2007 09:04:31 von unknown

Post removed (X-No-Archive: yes)

Re: Pipe-Problem

am 19.02.2007 09:08:38 von unknown

Post removed (X-No-Archive: yes)

Re: Pipe-Problem

am 19.02.2007 09:43:29 von Daniel Fischer

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 = ;
close R;
waitpid $pid, 0;
}
print $res;



Gruß
Daniel

Re: Pipe-Problem

am 20.02.2007 01:02:00 von David Haller

Til Schubbe 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..."