#!/usr/bin/perl # Die folgenden beiden Zeilen sollten *immer* in einem Perl-Programm # stehen, zumindest waehrend Entwicklung und Test. Damit wird man daran # gehindert, unsichere Konstruktionen zu benutzen ('strict') und vor # einigen moeglichen Fehlerquellen gewarnt ('warnings'). use strict; use warnings; htmlhead('IP Tabelle'); tablehead(); file2table('ip', '1'); tablefoot(); htmlfoot(); exit 0; # Programmende ######################################## # Hier kommen die Unterroutinen ######################################## sub htmlhead {    # Die Uebergabeparameter befinden sich im Array @_,    # das erste Element ist also $_[0]    print "\n$_[0]\n\n"; } sub htmlfoot {    print "\n"; } sub file2table {    my ($file, $highlight) = @_;    # Alle Beschreibungen in den Hash %desc einlesen    my %desc;    open (DESC, '<', "$file.desc") or die "kann $file.desc nicht oeffnen: $!";    while () {            # jede Zeile landet im Default-Parameter $_        chomp();                # Zeilenumbruch am Zeilenende entfernen        # teile am ersten Whitespace in 2 Teile        my ($h, $d) = split ' ', $_, 2;        # Schluessel ist der Host, Wert die Beschreibung        $desc{$h} = $d;    }    close DESC;    # IPs einlesen    open (RAW, '<', "$file.raw") or die "kann $file.raw nicht oeffnen: $!";    while () {             # auch hier jede Zeile einzeln in $_        # automatisch an Whitespace teilen (alles hinter        # dem zweiten Whitespace wird ignoriert!)        my ($host, $ip) = split;        print '';        my ($ba, $be) = ('', '');        # wenn $highlight irgendwo in $host auftaucht, $ba und $be setzen.        # $highlight zaehlt dabei - wie bei grep - als Regex-Muster!        if ($host =~ /$highlight/) {            $ba = ''; $be = '';        }        # Zeile fuer Host ausgeben, evtl mit Beschreibung,        # wenn sie im Hash existiert, ansonsten mit festem Leerzeichen        print "$ba$host$be$ba$ip$be$ba",            (exists $desc{$host} ? $desc{$host} : ' '),            "$be";        print "\n";    }    close RAW; } sub tablehead {    print "\n"; } sub tablefoot {    print "
\n"; }