Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6273[/thread]

STDIN überspringen



<< >> 9 Einträge, 1 Seite
naich
 2004-05-19 12:12
#82542 #82542
User since
2004-05-17
8 Artikel
BenutzerIn
[default_avatar]
Hey,

ich habe ein kleines, aber feines Problem.

Ich schreibe gerade ein Programm, dass ein STDIN hat.(warum auch nich)

Code: (dl )
my $in = <STDIN>;


Mein Problem ist nun, dass das Programm nun wochenlang auf eine Eingabe warten würde. Ich habe aber nur eine bestimmt Zeit zur Verfügung. Also brauche ich etwas, was z.B. eine Sekunde auf STDIN warten würde und wenn keine Eingabe kommt, soll er die STDIN überspringen.
Gibt`s sowas. Ich danke euch schonmal für eure Mühe.

MfG
naich
sri
 2004-05-19 12:44
#82543 #82543
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
perldoc perlipc

Code: (dl )
1
2
3
4
5
6
7
8
9
eval {
$|++;
local $SIG{ALRM} = sub { die "timeout!" };
alarm(2);
print "INPUT: ";
my $input = <STDIN>;
print "INPUT: $input";
};
print "END!\n";
\n\n

<!--EDIT|sri|1084956873-->
steve
 2004-05-19 18:00
#82544 #82544
User since
2004-03-04
52 Artikel
BenutzerIn
[default_avatar]
geht auch wieder mit IO::Select. :)

Steve

irgendwie wirds jetzt zum Standartsatz :p
sri
 2004-05-19 18:19
#82545 #82545
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=steve,19.05.2004, 16:00]geht auch wieder mit IO::Select. :)

Steve

irgendwie wirds jetzt zum Standartsatz :p[/quote]
Sieht aber nich so kewl aus. :)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use IO::Select;

$|++;
my $s = IO::Select->new;
$s->add( \*STDIN );
print "INPUT: ";
if ( $s->can_read(2) ) {
my $input = <STDIN>;
print "INPUT: $input";
}
else {
print "TIMEOUT!\n";
}
print "END\n";
\n\n

<!--EDIT|sri|1084977546-->
naich
 2004-05-19 18:30
#82546 #82546
User since
2004-05-17
8 Artikel
BenutzerIn
[default_avatar]
Klappt ja wunderprächtig. :) DANKE.

MfG
naich
sri
 2004-05-19 18:31
#82547 #82547
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
So is besser.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
$|++;
vec( my $in, fileno(STDIN), 1 ) = 1;
print "INPUT: ";
if ( select( $in, undef, undef, 2 ) ) {
my $input = <STDIN>;
print "INPUT: $input";
}
else {
print "TIMEOUT!\n";
}
print "END\n";
\n\n

<!--EDIT|sri|1084977230-->
sri
 2004-05-19 18:31
#82548 #82548
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
:blues:\n\n

<!--EDIT|sri|1084977336-->
steffenw
 2004-05-20 01:36
#82549 #82549
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Unter Windows funktioniert Select, aber nicht mit STDIN.
$SIG{USER} = sub {love 'Perl' or die};
sri
 2004-05-20 01:46
#82550 #82550
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=steffenw,19.05.2004, 23:36]Unter Windows funktioniert Select, aber nicht mit STDIN.[/quote]
Meine Beispiele sind halt immer für echte Betriebssysteme. ;)
<< >> 9 Einträge, 1 Seite



View all threads created 2004-05-19 12:12.