Wie kann ich überprüfen, (peek) STDIN geleitet von Daten in Perl ohne mit select?
Ich versuche zu verarbeiten, die Möglichkeit, dass keine Argumente und keine weitergeleiteten Daten an ein Perl-Skript. Ich gehe davon aus, dass, wenn es keine Argumente geben wird geleitet über STDIN. Jedoch, wenn der Nutzer keine Argumente und nicht Rohr nichts zu dem Skript, es wird versuchen, um Tastatur-Eingaben. Mein Ziel ist stattdessen eine Fehlermeldung.
Leider select()
ist nicht tragbar, einige nicht-POSIX-Systeme.
Gibt es eine andere Möglichkeit, dies zu tun mit maximaler Portabilität?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Perl kommt mit dem
-t
- Datei-test-operator, der Ihnen sagt, wenn eine bestimmte filehandle offen ist, um ein TTY. Also, sollten Sie in der Lage sein, dies zu tun:Einen schnellen test zeigt dies funktioniert einwandfrei auf Windows mit Perl 5.10.0 und Linux mit Perl 5.8.8, so sollte es portabel sein die meisten common Perl-Umgebungen.
Wie andere erwähnt haben,
select
wäre nicht eine verlässliche Wahl, da kann es mal sein, wenn Sie gerade Lesen, von einem Prozess, aber dieser Prozess hat noch nicht angefangen zu schreiben, noch.Alles gute,
Paul
-t
test schlägt fehl, obwohl keine Daten bekommen könnte verrohrt.Finden Sie unter: http://www.opengroup.org/onlinepubs/009695399/functions/isatty.html
Beachten Sie, dass wählen würde nicht viel helfen auf jeden Fall, denn es würde falsche Ergebnisse produzieren
wenn das weitergeleitete info war nicht noch bereit. Beispiel:
select()
sind, verwenden Sie POSIX-zu. Der OP ausdrücklich gesagt: