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
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
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
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
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
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 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Б