#!/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";
}