Formate


Einführung

Perl wurde ursprüglich u.a. für die Erstellung von formatierten Ausgaben (Reports) entwickelt. Daher stammt das R aus dem Namen Perl! Wir werden in dieser Seite kurz die Formatierungsmöglichkeiten von Perl erlätern.

Eine detailliertere Einführung in Perl Formate finden Sie in man perlform.

Ein besseres print using ####.##

Bevor wir tief in die Details von Formaten und der Funktion write() einsteigen sollten wir uns vor Augen führen, daß Formate in Perl gerade mal ein besserer Ersatz für BASIC's print using ####.## ist.

Reports Anatomie

Ein typischer Report besteht aus: Wir wollen also Schablonen für Seitenkopf, -rumpf und -fuß spezifizieren, und dann diese Schablonen nur noch mit aktuellen Werten füllen.

Leider gibt es in Perl (jedenfalls bis Version 5.004_01) noch keine explizite Mittel um Fußzeilen zu unterstützen.

Schablonen

Es gibt in Perl zwei Schablonen: Beispiel für einen Seitenkopf:
format STDOUT_TOP =
======================================================================
          WWW Statistik für den Monat @<<<<<<<<<<<   Seite: @<<
                         $monat,     $%
======================================================================
Domaine                      |  Hits            |       CGI-Aufrufe
----------------------------------------------------------------------
.
Beispiel für den passenden Rumpf:
format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<< | @>>>>>>>>>>>>>>>>
$dom,                          $hits,             $cgi_hits
.

Verwendung der Schablonen

Die Schablonen werden durch den Aufruf der Funktion write() automatisch aktiviert:
# gemeinsamer header
$monat = "Juni 1997";

# statistik lesen und aufbereiten:
while ($line = <IFHSTAT>) {
    chop $line;
    ($dom, $hits, $cgi_hits) = split(/:/, $line);
    write;
}
Die Ausgabe sieht dann z.B. so aus:
======================================================================
          WWW Statistik für den Monat Juni 1997      Seite: 1  
======================================================================
Domaine                      |  Hits            |       CGI-Aufrufe
----------------------------------------------------------------------
uni-koeln.de                 | 12342            |              2343
uni-wuppertal.de             | 4442             |               310
aol.com                      | 34321            |              1210

[...]
^L
======================================================================
          WWW Statistik für den Monat Juni 1997      Seite: 2  
======================================================================
Domaine                      |  Hits            |       CGI-Aufrufe
----------------------------------------------------------------------
mit.edu                      | 983              |                11
nasa.gov                     | 1442             |               341

Schablonen und Filehandles

Schablonen sind immer mit einem Filehandle verbunden. Unser obiges Beispiel war mit STDOUT verbunden, da wir unsere Ausgabe nach STDOUT haben wollten. Daher hieß auch der Report-Name: STDOUT_TOP und STDOUT. Die Funktion write() wurde ohne Argumente und ohne Filehandle aufgerufen. Die Argumente sind im den Format-Schablonen eingepflegt gewesen (Variablen). Der Filehandle wird durch die Funktion select() festgelegt!
open (OFILE, "> $outfilename")
    or die "can't open file $outfilename: $!\n";

  $old_file_handle = select(OFILE);
     $^ = 'OFILE_TOP';   # Header-Schablone
     $~ = 'OFILE';       # Rumpf-Schablone
     while (<>) {
         # ....
         write;     # nach OFILE_TOP, OFILE
     }
  select($old_file_handle);

close (OFILE);

Vorherige Seite, Nächste Seite, Index, Hauptindex.


Copyright © 1997/08/16 by Farid Hajji.