• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst][perl]: Einfache Wertübergabe an Filter

Hallo,

wie übergebe ich von einem perl-script aus einen Variablenwert an ein externes Filterprogramm, bzw. wie lese ich danach das STDOUT-Ergebnis wieder in eine Variable?

Pseudocode:
Code:
$i="Beispieltext";
$j=system("Meinfilter < $i");
print("Veränderter Text: $j");
oder so ähnlich...
 
jengelh schrieb:
Code:
perldoc -f open
Code:
man perlipc
/Open2

Hmmm, alles irgendwie sehr unbefriedigend. Hab's mit open2 probiert und das System hängt. Mit Comm.pl kriege ich ne Fehlermeldung, dass die Rechte fehlen, um den Prozess auszuführen... Ich dacht', es gibt da ne einfache Standardlösung :( Werd die Daten wohl doch einfach über temporäre Files austauschen...
 
Code:
use IPC::Open2:
open2(\*RD, \*WD, "filter");
print WD "secret";
close WD;
$crypted = <RD>;
Du musst natürlich zusehen, dass du dich nicht selbst blockierst. Während du in die Pipe schreibst, kann filter die Rückgabepipe vollmachen und wartet somit, liest also auch nicht deine Eingaben ein. Wenn möglich sollte man solche Konstrukte vermeiden (Unix-Prinzip: mach mehrere Programme draus wenn möglich), oder du designst alles so, dass es unterhalb der Pipegröße bleibt (geht nicht immer), oder du verwendest non-blocking-Writes, aber dann wird auch das Programm größer, weil du in einer Schleife dann teilsynchron lesen+schreiben musst.
 
Ich schätze mal:
Code:
my $i = "Beispieltext";
my $j = `Meinfilter < $i`;
print "Veränderter Text: ".$j;
Gruß
 
abgdf schrieb:
Ich schätze mal:
Code:
my $i = "Beispieltext";
my $j = `Meinfilter < $i`;
print "Veränderter Text: ".$j;
Gruß

Danke, fast. So sucht die Shell natürlich nach einer Datei namens Beispieltext, um deren Inhalt an Meinfilter zum Bearbeiten zu Übergeben. Wie ging das verdammt nochmal mit dem Quoten?

m.a.W. Wie bringt man z.B. cat nochmal dazu, sich so zu verhalten wie echo?

cat < 'bla' war's nicht
cat < \'bla\' auch nicht
????
 
harvey schrieb:
m.a.W. Wie bringt man z.B. cat nochmal dazu, sich so zu verhalten wie echo?

cat < 'bla' war's nicht
cat < \'bla\' auch nicht
????

Ha, ich hab's wieder:

Code:
echo bla | cat

Da jetzt dummerweise mein Text Apostrophen enthält, muß das Programm so aussehen:

Code:
my $i = "Beispieltext"; 
my $j = `echo "$i" | Meinfilter`; 
print "Veränderter Text: ".$j;

Zum Glück gibt es bei mir nur Apostrophen und nicht auch noch Anführungszeichen, sonst sähe ich alt aus... ;)
 
Oben