STDIN leer - wie weiter?

Hallöchen,

gibt es eine Möglichkeit in perl, um herauszufinden, ob der STDIN belegt ist?

Das übliche Konstrukt "while () { … } " bleibt leider hängen, wenn der STDIN unbefüttert ist.
Kann man das irgendwie umgehen?

Gruss,
Michael

gibt es eine Möglichkeit in perl, um herauszufinden, ob der
STDIN belegt ist?

use IO::Select;
my $s = IO::Select-\>new;
$s-\>add(\*STDIN);
if ($s-\>can\_read(0)) {
 print "STDIN has input\n";
}

Hallo

gibt es eine Möglichkeit in perl, um herauszufinden, ob der
STDIN belegt ist?

Das übliche Konstrukt "while () { … } " bleibt

Ist Dir klar, was „“ macht?

leider hängen, wenn der STDIN unbefüttert ist.
Kann man das irgendwie umgehen?

Da gibt es viele Möglichkeiten, eine wurde schon genannt,
eine andere wäre sowas:

 ...
 my $input;

 unless( sysread(STDIN, $input, 64\_000) ) {
 print "have no stdin\n";
 }

 if( length $input ) {
 print "have some stdin:\n", $input
 }
 ...

Grüße

CMБ

Hallöchen zurück.

Ist Dir klar, was „“ macht?

Gerade so hinreichend für meine bisherigen Zwecke :wink:

Da gibt es viele Möglichkeiten, eine wurde schon genannt,
eine andere wäre sowas:


my $input;
unless( sysread(STDIN, $input, 64_000) ) {
print „have no stdin\n“;
}

Bleibt leider auch hängen wenn STDIN unbefüttert war :frowning:
Gruss,
Michael

use IO::Select;
my $s = IO::Select->new;
$s->add(*STDIN);
if ($s->can_read(0)) {
print „STDIN has input\n“;
}

Danke, das hat’s getan.
Gruss,
Michael

Hallo,

my $input;
unless( sysread(STDIN, $input, 64_000) ) {
print „have no stdin\n“;
}

Bleibt leider auch hängen wenn STDIN unbefüttert war :frowning:

Tatsache? In welchem Kontext rufst Du denn das
Perl-Skript auf? Welches System ist das (+welche
Perl-Version)?

Hier tut das nämlich.

Grüße

CMБ

my $input;
unless( sysread(STDIN, $input, 64_000) ) {
print „have no stdin\n“;
}

Bleibt leider auch hängen wenn STDIN unbefüttert war :frowning:

Tatsache? In welchem Kontext rufst Du denn das
Perl-Skript auf? Welches System ist das (+welche
Perl-Version)?

bei mir auch.

perl -wle'
my $input;
unless( sysread(STDIN, $input, 64\_000) ) {
 print "have no stdin";
}
if( length $input ) {
 print "have some stdin: ", $input
}
'

have some stdin: 

tina@tinita:~$ perl -wle'
my $input;
unless( sysread(STDIN, $input, 64\_000) ) {
 print "have no stdin";
}
if( length $input ) {
 print "have some stdin: ", $input
}
'
### hier wartet das skript auf eine eingabe ###
have some stdin: 

tina@tinita:~$ echo foo | perl -wle'
my $input;
unless( sysread(STDIN, $input, 64\_000) ) {
 print "have no stdin";
}
if( length $input ) {
 print "have some stdin: ", $input
}
'
have some stdin: foo

This is perl, v5.8.8 built for i486-linux-gnu-thread-multi

Tatsache? In welchem Kontext rufst Du denn das :stuck_out_tongue:erl-Skript auf? Welches System ist das (+welche Perl-Version)?

Siehe Tina.
Solaris Unix, perl Version 5.6.1

Jetzt habe ich leider ein richtig dickes Ei gelegt mit der Version von Tina (die tatsächlich meldet wenn kein STDIN da war):

Multipipes werden problematisch, also sowas in der Art:

cat

Multipipes werden problematisch, also sowas in der Art:

cat

Hallo,

Sieht nach einem Problem von paralleler Architektur aus.
Dagegen kann man nichts mehr tun, oder?
Jetzt muss ich mich wohl entscheiden zwischen
„Sicherheitsabbruch“ und „Pipes“?

Versuch mal:

 use strict;
 use warnings;

 seek STDIN, 1, 0;
 sleep 1;
 if( tell(STDIN) ) {
 seek STDIN, 0, 0;
 print "have some stdin:\n", 
 }
 else {
 print "have no stdin!\n"
 }

Klappt bei mir unter Linux.

Grüße

CMБ