Thread unverständnis zu sprintf
(22 answers)
Opened by also at 2010-08-13 21:19
Es kann durchaus sein, dass du noch ganz anderen Probleme bekommen könntest. Wie ich schon sagte, Term::ReadKey ist, soweit ich weiß, nicht dazu gedacht von was andrem als Terminals zu lesen.
Das kann dir später ein Bein stellen, es jetzt nicht "richtig" zu lösen. Zumal es ja nicht so kompliziert ist. :-) Man könnte natürlich auch ![]() Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $input=shift(@ARGV) || "/dev/hidraw2"; open(my $fh, '<', $input) or die("ERROR open $input ($!)\n"); binmode($fh); # Puffer leeren read_all_keys($fh); my $key; # schleife unterbrechen wenn ein Zeichen gesendet wurde while(!defined($key=read_key($fh))) { print localtime()."\n"; sleep(1); } # alle gesendeten Zeichen lesen. my @keys=($key,read_all_keys($fh)); print Dumper(\@keys); close($fh); ######################################################################## # Funktionen ######################################################################## # alle Zeichen im Puffer lesen sub read_all_keys { my $fh=shift; my @keys; while(defined(my $key = read_key($fh))) { push(@keys,$key) if(test_vals(0,$key)); } return @keys; } # ein Zeichen aus dem Puffer lesen sub read_key { my $fh=shift; my $key; eval{ local $SIG{ALRM}=sub{die}; my $buffer; alarm(1); read($fh,$buffer,8); alarm(0); my @l=unpack('CxC*',$buffer); if( test_vals(1,[@l[3..6]]) && test_vals(0,\@l)) { $key=[@l[0,1,2]]; } else { $key=[0,0,0]; } }; return $key } # haben alle Zeichen im Array den selben Wert? sub test_vals { my $val=shift; my $data=shift; my $ok=@$data; for(@$data) { $ok-- if($val == $_); } return $ok>0?1:0; } |