#!/usr/bin/perl use strict; use warnings; # Datensatztrenner beim Einlesen $/ = "\n\n--------"; while (<>) {    # lokale Variablen    my ($date, $time, $localphone, $remotephone, $duration) = (0,0,0,0,0);    # abgehender Anruf    if (/OUTGOING CALL/) {        # Datum, Uhrzeit und lokale Nummer merken        if (/\A\s+(\d\d\/\d\d\/\d\d)\s+(\d\d:\d\d:\d\d)\s+LINE\s*=\s*\d+\s+STN\s*=\s*(\d+)/) {            $date = $1;            $time = $2;            $localphone = $3;        } else {            warn "OUT: Kein Datum, Uhrzeit oder lokale Nummer in Datensatz:\n$_\n";        }        # Angerufene Nummer merken        if (/\n\s+DIGITS DIALED\s+(\d+)/) {            $remotephone = $1;        } else {            warn "OUT: Kein angerufene Nummer in Datensatz:\n$_\n";        }        # Anrufdauer merken        if (/\n(\d\d:\d\d:\d\d)\s+CALL RELEASED/) {            $duration = $1;        } else {            warn "OUT: Keine Anrufdauer in Datensatz:\n$_\n";        }        # Alles in einer Zeile ausgeben        print "OUT,$date,$time,$localphone,$remotephone,$duration\n";    # eingehender Anruf    } elsif (/INCOMING CALL/) {        my $whatsnext = '---';  # noch eine lokale Variable        # Datum, Uhrzeit und lokale Nummer merken        if (/\A\s+(\d\d\/\d\d\/\d\d)\s+(\d\d:\d\d:\d\d)\s+LINE\s*=\s*\d+\s+STN\s*=\s*(\d+)/) {            $date = $1;            $time = $2;            $localphone = $3;        } else {            warn "IN: Kein Datum, Uhrzeit oder lokale Nummer in Datensatz:\n$_\n";        }        # Anrufende Nummer merken        if (/\n\s+CALLING NUMBER\s+(\d+)/) {            $remotephone = $1;        } else {            warn "IN: Kein anrufende Nummer in Datensatz:\n$_\n";        }        # Anrufdauer und Ergebnis merken        # TODO: statt "HANG UP" sollte das stehen, was im Log auftaucht,        # wenn der Anrufer auflegt, ohne angenommen worden zu sein.        if (/\n(\d\d:\d\d:\d\d)\s+(CALL RELEASED|TRANSFERRED|HANG UP)/) {            $duration = $1;            $whatsnext = $2;        } else {            warn "IN: Keine Anrufdauer in Datensatz:\n$_\n";        }        # Alles in einer Zeile ausgeben        print "IN,$date,$time,$localphone,$remotephone,$duration,$whatsnext\n";    } # alles andere ignorieren }