SELFHTML: CGI/Perl / Perl-Sprachelemente / Mit Zahlen und Zeit arbeiten
Description: (SELFHTML 7.0) Wie Sie in Perl mit Datum, Uhrzeit und mit mathematischen Operationen arbeiten können.
Keywords: SELFHTML, Perl, Datum, Uhrzeit, Zeit, Berechnungen

SELFHTML/Quickbar CGI/Perl Perl-Sprachelemente

| ## Mit Zahlen und Zeit arbeiten
| Technisch/wissenschaftliche Berechnungen Datum und Uhrzeit

## Technisch/wissenschaftliche Berechnungen

In Perl stehen für die wichtigsten höheren mathematischen Funktionen entsprechende Perl-Funktionen zur Verfügung.

### Beispiele:

    #!/usr/bin/perl

    $Abswert = abs(-45683);
    print "Absolutwert von -45683 lautet: ", $Abswert, "\n";

    $Wurzel = sqrt(23876);
    print "Die Quadratwurzel von 23876 lautet: ", $Wurzel, "\n";

    $Ganzzahl = int(sqrt(3298476));
    print "Der Ganzzahlanteil der Quadratwurzel 3298476 von lautet: ", $Ganzzahl, "\n";

    $Exp = exp(39);
    print "Die Potenz 39 zur Basis e lautet: ", $Exp, "\n";

    $Log = log(23);
    print "Der natuerliche Logarithmus zur Basis e von 23 lautet: ", $Log, "\n";

    $Sinus = sin(1.2387);
    $Cosinus = cos(10.237);
    $ArkTangens = atan2(1.389,2.438);
    print "Der Sinus von 1.2387 lautet: ", $Sinus, "\n";
    print "Der Cosinus von 10.237 lautet: ", $Cosinus, "\n";
    print "Der Arkustangens von 1.389/2.438 lautet: ", $ArkTangens, "\n";

    @Hexwerte = (10,20,30,40,50,60,70,80,90,A0,B0,C0,D0,E0,F0);
    for(@Hexwerte)
     {
      $Dezimalwert = hex($_);
      print $_, " ist dezimal: ", $Dezimalwert, "\n";
     }

### Erläuterung:

Mit der Funktion `abs` können Sie erzwingen, daß eine Zahl in jedem Fall positiv ist. Übergeben Sie der Funktion die Zahl, die behandelt werden soll. Die Funktion gibt den behandelten Wert zurück.
Mit `sqrt` können Sie die Quadratwurzel einer Zahl berechnen. Übergeben Sie der Funktion die Zahl, aus der die Wurzel gezogen werden soll. Die Funktion gibt das Ergebnis zurück.
Mit `int` erzwingen Sie von einer Bruchzahl den ganzzahligen Anteil, also bei 3.1415 etwa die Zahl 3. Übergeben Sie der Funktion die Zahl, aus der der Kommawert entfernt werden soll. Die Funktion gibt das Ergebnis zurück. Im obigen Beispiel zu dieser Funktion sehen Sie übrigens, wie man in Perl einer Funktion eine andere Funktion übergeben kann. Die Funktion berechnet in diesem Beispiel den Rückgabewert der Funktion für die Quadratwurzel.
Die Funktionen `exp` liefert die Konstante `e` in einer beliebigen Potenz zurück. Die Gewünschte Potenz übergeben Sie als Parameter. Die Funktion liefert das Ergebnis zurück.
Die Funktion `log` ermittelt den natürlichen Logarithmus einer Zahl zur Basis e. Übergeben Sie die gewünschte Zahl als Parameter. Die Funktion gibt das Ergebnis zurück.
Als geometrische Funktionen bietet Perl `sin` für Sinus, `cos` für Cosinus und `atan2` für den Arkustangens an. Übergeben Sie diesen Funktionen die gewünschte Zahl. Arkustangens erwartet zwei Werte: von und bis. Die Funktionen geben das Ergebnis zurück.

Neben diesen Funktionen sind natürlich auch Berechnungen mit Berechnungsoperatoren möglich.

Zum Konvertieren von Hexadezimalwerten in Dezimalwerte können Sie die Funktion `hex` verwenden. Übergeben Sie der Funktion einen Hexadezimalwert (Ziffern 0 bis 9 und Buchstaben A bis F). Die Funktion gibt den Dezimalwert zurück.

## Datum und Uhrzeit

Perl bietet Funktionen zum Ermitteln von Datum und Uhrzeit an.

### Beispiel:

    #!/usr/bin/perl

    $Jetztwert = time();
    $Jetztzeit = localtime($Jetztwert);
    &Deutschnamen;
    @Zeit = split(/ +/,$Jetztzeit);
    @Uhrzeit = split(/:/,$Zeit[3]);

    print "Guten Tag!\n";
    print "Heute ist ",$Zeit[0],", der ",$Zeit[2],". ",$Zeit[1]," ",$Zeit[4],"\n";
    print "Es ist jetzt ",$Uhrzeit[0],":",$Uhrzeit[1]," Uhr\n";

    sub Deutschnamen
    {
     $Jetztzeit =~ s/Mon/Montag/;
     $Jetztzeit =~ s/Tue/Dienstag/;
     $Jetztzeit =~ s/Wed/Mittwoch/;
     $Jetztzeit =~ s/Thu/Donnerstag/;
     $Jetztzeit =~ s/Fri/Freitag/;
     $Jetztzeit =~ s/Sat/Samstag/;
     $Jetztzeit =~ s/Sun/Sonntag/;
     $Jetztzeit =~ s/Jan/Januar/;
     $Jetztzeit =~ s/Feb/Februar/;
     $Jetztzeit =~ s/Mar/Maerz/;
     $Jetztzeit =~ s/Apr/April/;
     $Jetztzeit =~ s/May/Mai/;
     $Jetztzeit =~ s/Jun/Juni/;
     $Jetztzeit =~ s/Jul/Juli/;
     $Jetztzeit =~ s/Aug/August/;
     $Jetztzeit =~ s/Sep/September/;
     $Jetztzeit =~ s/Oct/Oktober/;
     $Jetztzeit =~ s/Nov/November/;
     $Jetztzeit =~ s/Dec/Dezember/;
    }

### Erläuterung:

Das obige Beispiel ermittelt Datum und Uhrzeit und gibt das Ergebnis ordentlich formatiert und deutschsprachig aus.

Mit dem Aufruf der Perl-Funktion `time` wird die aktuelle Zeit ermittelt. Die Funktion gibt, wie unter Unix und C üblich, die Anzahl der Millisekunden zurück, die seit dem 1.1.1970 vergangen sind. Das ist eine ziemlich hohe Zahl, die nichts weiter aussagt, aber sehr exakt ist. Im obigen Beispiel wird diese Zahl in dem Skalar `$Jetztwert` gespeichert. Sie ist Grundlage für den Aufruf der Funktion `localtime`. Diese Funktion erwartet als Parameter eine Zahl, die sie als Anzahl Millisekunden seit 1.1.1970 interpretiert. Die Funktion erzeugt daraus eine Zeichenkette, die Datum und Uhrzeit im internationalen Format enthält, z.B. `Fri Jun 13 20:29:11 1997`. Diese Zeichenkette gibt die Funktion zurück. Im obigben Beispiel wird dieser Rückgabewert in `$Jetztzeit` gespeichert.
Im Beispiel wird als nächstes ein Unterprogramm mit Namen `Deutschnamen` aufgerufen, das in der Zeichenkette von `$Jetztzeit` alle denkbaren internationalen Tages- und Monatskürzel durch die üblichen deutschsprachigen Namen ersetzt.
Die Datums- und Zeitelemente in `$Jetztzeit` sind durch Leerzeichen voneinander getrennt. Diese Eigenschaft macht sich die Anweisung `@Zeit = split(/ /,$Jetztzeit);` im Beispiel zu eigen. Anschließend sind die einzelnen Elemente wie Tag, Monat, Jahr usw. einzeln als Elemente dieser Liste ansprechbar. Ein Element dieser Liste, ansprechbar über $Zeit[3], stellt die Uhrzeit dar. Die Uhrzeit besteht aus Stunden, Minuten und Sekunden, getrennt durch Doppelpunkt. Auch diese Zeichenkette wird im Beispiel wieder in ihre Bestandteile zerlegt, nämlich mit der Anweisung `@Uhrzeit = split(/:/,$Zeit[3]);`.
Danach sind alle Elemente einzeln ansprechbar und können - wie im Beispiel - mit der `print`-Funktion nach Belieben ausgegeben werden.

weiter: | CGI-typische Anweisungen in Perl
zurück: | Zeichenketten und Listen manipulieren

SELFHTML/Quickbar CGI/Perl Perl-Sprachelemente
© 1998 Stefan Münz, muenz@csi.com