#! perl -w
use strict;
use CGI qw/ :standard/;
my @datahashes = daten('fp.txt'); # Daten werden allen Subroutinen zugänglich gemacht
print page('Flughafen Bielefeld',print_text_html(@datahashes)); # der Seite wird der Name Flughafen gegeben, der Subroutine werden die Daten übergeben print "$day";
sub daten {
my $file = shift; #???
open(FILE,$file) || die "Datei $file nicht gefunden!"; # die Datei fp.txt, wie ganz oben angegeben, wird geöffnet
my %am = my %ziel = my %von = my %gate = my %arrival = my %depart =(); # es werden leere Hashes deklariert
while ( defined (my $line = <FILE>) ) { # durch die while-Schleife kann die Datei Zeile für Zeile eingelsen werden
chomp $line; # chomp entfernt den Zeilenumbruch
my @fields = split(' ', $line); # das array wird in zeilen zerlegt
my $flugnr = $fields[1]; # das 2. Element des Arrays wird als $flugnr deklariert
$am{$flugnr} = $fields[0]; # die restlichen Elemente werden unter dem Key flugnr abgelegt
$ziel{$flugnr} = $fields[2];
$von{$flugnr} = $fields[3];
$gate{$flugnr} = $fields[4];
$arrival{$flugnr} = $fields[5];
$depart{$flugnr} = $fields[6];
};
close(FILE); # die Datei wird wieder zugemacht
return (\%am,\%ziel,\%von,\%gate,\%arrival,\%depart); # Hashreferenzen werden zurückggeben. Die Rückgabe mehrerer Hashes ist nicht möglich, weil
}; # Perl diese sonst zu einem einizgen langen Hash zusammenpacken würde
sub datum_uhrzeit { #neue Subroutine
my ($Sekunden,$Minuten, $Stunden, $Monatstag, $Monat, # Den Variablen wird die reale Zeit/das reale Datum übergeben
$Jahr, $Wochentag) = localtime(time);
my $CTIME_String = localtime(time);
$Monat+=1;
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
$Jahr+=1900;
my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Do
nnerstag","Freitag","Samstag");
my $datum = "$Wochentage[$Wochentag], der $Monatstag.$Monat.$Jahr";
my $uhrzeit = "$Stunden:$Minuten";
return ($uhrzeit,$datum,$Monatstag,$Monat,$Jahr);
};
sub status {
my($am,$ziel,$von,$gate,$arrival,$depart)=@_; #Aufruf Subroutine
my ($uhrzeit,$datum,$Monatstag,$Monat,$Jahr) = &datum_uhrzeit(); #Aufruf Subroutine
my ($std,$min) = split(':',$uhrzeit); #realeUhrzeit wird in Minuten und Stunden aufgeteilt
my $realminutes = 60*$std + $min; #reale Uhrzeit wird nur noch in Minuten angegeben
my %status=();
foreach my $flugnr ( keys %$am ) {
my ($stunde,$minute) = split(':',$depart->{$flugnr}); #depart-Uhrzeit wird in Minuten und Stunden aufgeteilt
my ($departday,$departmonth,$departyear) = split('\.',$am->{$flugnr});
my $departminutes = 60*$stunde + $minute; #depart-Uhrzeit wird nur noch in Minuten angegeben
my $info=$departminutes-$realminutes;
my $status='';
SWITCH:
{
if ( ($info <= -6) && ($Monatstag eq $departday) && ($Monat eq $departmonth) && ($Jahr eq $departyear) ) {
$status="weg"; last SWITCH; };
if ( ($info <= 0) && ($Monatstag eq $departday) && ($Monat eq $departmonth) && ($Jahr eq $departyear) ) {
$status="startet"; last SWITCH; };
if ( (($info <= 10) && ($Monatstag eq $departday)) && (($Monat eq $departmonth) && ($Jahr eq $departyear))) {
$status="Boarding"; last SWITCH; };
if ( (($info <= 30) && ($Monatstag eq $departday)) && (($Monat eq $departmonth) && ($Jahr eq $departyear))) {
$status="Check in"; last SWITCH; };
$status="am Boden";
};
$status{$flugnr}=$status; # der Status auf gestartet umspringen
};
return %status; #$status wird zurück gegeben
};