Thread Einstieg in Webseitenprogrammierung mit Perl
(16 answers)
Opened by plinepa at 2013-09-01 16:12
Bei Perl kannst du mit HTML::Mason auch Perl-Code direkt in die HTML-Datei schreiben.
Aber sinnvollerweise sollte Code und Inhalt getrennt werden. Ich arbeite mit HTML::Template::Compiled und benutze ein Perl-Programm als CGI-Handler beim Apache für die HTML-Dateien. Beispiel: Eine index.html: Code (html): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <html> <?INCLUDE HEAD1.html ?> <body> <h1><?= TITLE ?></h1> <p>Hier sind die aktuellen Wetterdaten von <?= NOW ?></p> <table> <caption>Wetterdaten für <?= MONTH ?>/<?= YEAR ?></caption> <?LOOP TABELLE1 ALIAS=ROW?> <tr> <?LOOP ROW ALIAS=DATA?> <td><?= DATA ?></td> <?/LOOP?> </tr> <?/LOOP?> </table> </body> </html> HEAD1.html: Code (html): (dl
)
1 2 3 4 <head> <title>Wetteranzeige</title> <link rel="stylesheet" type="text/css" src="wd.css"> </head> Perlprogramm, welches die Datenein-/ausgabe verabeitet: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #!/usr/bin/perl use strict; use warnings; use CGI; use LWP::UserAgent; use HTML::Template::Compiled; my $DOCUMENT_ROOT = $ENV{DOCUMENT_ROOT} || '.'; # für Fehlermeldumngen my $ERROR = ''; my $cgi = CGI->new; my @data; #### Wetterstation auslesen # my $lwp = LWP::UserAgent->new(); # hole aktuelle Tempertaturdaten von einer Wetterstation ab # Daten werden als Zeilen gesendet, in der Tab-sesparierte Daten vorliegen # Beispiel: # 1200 29.7 # 1300 31.2 # etc. # Über das HTTP-Protokoll abfragen my $result = $lwp->get('http://192.168.1.111/weather?date=today'); # falls die Abfrage fehlschlägt if ( not $result->is_success ) { $ERROR = 'Wetterstation nicht in Betrieb!' } # Abfrage war OK, Wetterstation hat was gesendet (hoffentlich die Daten ;) ) else { # Datenstrom einlesen my $rawstream = $result->decoded_content; # Datenstrom in einzelne Zeilen auftrennen und in Array speichern my @rawdata = split "\n", $rawstream; # Daten nun in eigene Arraystruktur (für Template später) speichern @data = map { [ ( split "\t" ) # Tabeseparierte Zeile aufsplitten und die Liste ] # in anonymes Array speichern } @rawdata; } ### Variablen für Datumsinhalte # my @MONATE = qw(- Jan Feb Mar Apr Mai Jun Jul Aug Sep Okt Nov Dez); my @localtime = localtime(); my $YEAR = $localtime[5] + 1900; my $MONTH = $MONATE[ $localtime[4] + 1 ]; my $NOW = "$localtime[3].$MONTH.$YEAR $localtime[2]:$localtime[1].$localtime[0]"; ### Erzeuge ein HHTML::Template::Compiled-Objekt # my $htc = HTML::Template::Compiled->new( filename => "$DOCUMENT_ROOT/index.html", tagstyle => [qw(-asp -comment +php -tt)], ); $htc->param( TITLE => 'Wetterstation 2', TABELLE1 => \@data, NOW => $NOW, MONTH => $MONTH, YEAR => $YEAR, ); print $cgi->header( -type => 'text/html' ), $htc->output; 1; Sendet dann folgendes beim Ablauf an den aufrufenden Browser: Code: (dl
)
1 Content-Type: text/html; charset=ISO-8859-1 Das geht alles natürlich noch strukturierter. Ich wollte es nur mal als Beispiel posten. Ich habs getestet, nicht mit einer Wetterstation sondern mit einem Programm auf einem lokalen Server, das mir nach Abruf Daten auspuckt. Last edited: 2013-09-04 11:02:09 +0200 (CEST) die Drachin Gwendolyn
|