$mw->repeat(1000,sub{ print "@values"."\n"; }); #### share @values; share $opened_port; #### sub opening_port { require Win32::SerialPort; $serial=Win32::SerialPort->new("COM6"); $serial->baudrate(9600) || die "Bad baudrate"; $serial->parity('none') || die "Bad parity"; $serial->databits(8) || die "Bad databits"; $serial->stopbits(1) || die "Bad stopbits"; #$serial->buffers(4096,4096) || die "Buffer error"; $serial->handshake("none") || die "Bad handshake method"; $serial->write_settings; while(1) { print $opened_port; if($opened_port) { my @array; my $string; my $i=0; do { $string=$serial->read(1); #Beolvass egy karakteret a sorosportról if((ord($string) >= 0x09 && ord($string) <=0x7A) || $string eq '\t' || $string eq '\n') #megvizsgálja, hogy a beolvasott karakter megfelel-e az ASCII kritériumoknak { $array[$i]=$string; #elmenti a tömbbe i.-ik helyére az adott karaktert $i++; #növeli az index értékét } }while($string ne "\n" ); #addig fut a program amíg nem \n a beolvasott karakter $i=0; $string = join('' , @array ) ; #ezután egy skalárba összefűzi a tömb elemeit, egymás után - nincs szeparátor chomp($string); # leszedi a \r és \n karaktereket a string végéről @values = split('\t',$string); #majd felbontja a skalárt a tabulárotok mentén # az 1-es index tartalmazza a a hőmérsékleti adatokat, a 3-as index az időt } } }