Hallo, Moritz.
also erstmal kannst du
if (-p STDIN){
abfragen, ob das Programm mit einer Pipe gestartet wurde.
Das hilft mir zumindest schonmal, bei Fehlbenutzung zu croaken und ist ein wichtiger Schritt.
Dann könntest du dich von der Perlfaq inspirieren lassen:
How do I open a file without blocking?
Wunderbar, auch das kann helfen.
Aber für was brauchst du das denn? Wenn du eine Pipe der Form foo | bar | baz hast, dann werden die Programme bar und baz quasi gleichzeitig mit foo gestartet, d.h. STDIN ist immer am Anfang leer.
Im Prinzip hat es mit Schnittstellen zu tun.
Aufgrund der (sagen wir fragwürdigen) Gestaltung des Systems kann ich nicht sicher sein, ob ich schon Daten vom STDIN annehmen muss:
(vorgelagerte Module) | (mein perl) | (nachgelagerte Module)
Wenn vorgelagerte Module nichts ausgeben, aber keinen Fehler melden, muss ich das erkennen können und entsprechend weitermachen.
Und die außenstehenden Module sind meistens nicht perl.
Gruss,
Mike