Thread Pipes: kleines Verständnis Problem (4 answers)
Opened by sid burn at 2006-06-19 23:40

sid burn
 2006-06-20 00:46
#67454 #67454
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
das print <PIPE> liest tatsächlich erst alles ein und gibt es dann aus.

Erstmal Danke für die Antwort.

Ich habe noch etwas weiter getestet und ich glaube ich bin auf die Lösung des Problems gekommen. (Beziehungsweise war es eher ein Denkfehler von mir) Noch immer gibt es ja einen unterschied zwischen:

Code: (dl )
1
2
open PIPE, "-|", "grep -r hostname /etc";
print <PIPE>;

Das liest erst alles ein, und gibt dann alles aus.

Code: (dl )
1
2
3
open PIPE, "|-", "grep -r hostname /etc";
print <PIPE>;
close PIPE;

Gibt sofort alles aus, durch deine Antwort habe ich nochmal etwas weiter getestet.

Code: (dl )
1
2
3
4
open GREP, "|-", "grep -r hostname /etc";
@data = <GREP>;
print scalar @data;
close GREP;


Dieses Stückchen Code gibt trotzdem das ergebnis des greps zurück, obwohl ich das nirgendswo anfordere. Anscheind ist es so, dass wenn ich jedesmal "<GREP>" aufrufe mein Kommando aufgerufen wird. Da ich aber nichts an <GREP> übergebe wird der Befehl ganz normal verarbeitet. Und Lesend davon zugreifen geht auch nicht. Da ich also nichts auslese ist es praktisch das selbe als würde ich den Befehl einmal ausführen, und danach wieder zurück zu meinen Perl Programm kommen, es ist also logisch warum ich die Ausgabe sofort sehe, vom verhalten her ist es praktisch das selbe als hätte ich system() benutzt.

Der Beweis das ich ja nichts auslese ist, dass @data Leer bleibt.

Eigentlich ist das ganze identisch mit diesem Code:
Code: (dl )
echo "" | grep -r hostname /etc


Irgendwie wird mir das ganze Konstrukt jetzt einleuchtend :blush: Und Sinn ergibt es nicht wirklich das Pipe vorne an zu schreiben, und es ist wohl auch nicht das was jemand möchte. (Jedenfalls in diesem Fall) ^^
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Pipes: kleines Verständnis Problem