1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
open(LOG,">>${LOGDIR}/${LOGFILE}") ||die "Logfile kann nicht geöffnet werden\n";
select(LOG), $| = 1;
open(DEV, "<$PORT") || die "Kann den Port $PORT: $_ nicht öffnen";
while($_ = <DEV>){
# Aufspliten der Nachricht für die Verarbeitung
($start, $ric, $date, $time, $message, $end) = split(/::/, $_);
print $message;
}
undef $ob;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use strict; use watnings; #... my @messages; open(my $dev, '<', $PORT) || die "Kann den Port $PORT: $_ nicht öffnen"; while(my $line=<$dev>) { # Aufspliten der Nachricht für die Verarbeitung my ($start, $ric, $date, $time, $message, $end) = split(/::/, $line); next if( grep{$message eq $_}@messages ); push(@messages,$message); pop(@messages) while(@messages > 10); print $message; }
1 2 3
next if( grep{$message eq $_}@messages ); push(@messages,$message); pop(@messages) while(@messages > 10);
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
#... # Datenstrom zeilenweise lesen while ( my $line = <DATA> ) { # Felder auftrennen (zum Testen vereinfacht und Zeilenumbruch rausgeworfen) my ( $start, $message ) = split /::|\n/, $line; # Feld "Message" wird nur ausgegeben, wenn es NICHT in den letzten 10 Zeilen enthalten war # Zur Kontrolle geben wir auch mal die letzten 10 "Message"s aus # und auch die Nummer der aktuellen "Message" print "$start : $message | @messages\n" unless grep { $message eq $_ } @messages; # aktuelle "Message" merken push @messages, $message; # aelteste "Message" loeschen, wenn es mehr als 10 geworden sind (FIFO) shift @messages if 10 < @messages; } __DATA__ 01::Anton 02::Berta 03::Caesar 04::Berta 05::Berta 06::Caesar 07::Berta 08::Berta 09::Caesar 10::Berta 11::Berta 12::Caesar 13::Berta 14::Berta 15::Caesar 16::Berta 17::Berta 18::Caesar 19::Berta 20::Dora 21::Berta 22::Caesar 23::Berta 24::Dora 25::Berta 26::Caesar 27::Berta 28::Dora 29::Berta 30::Caesar 31::Berta 32::Dora 33::Anton