Thread Einstieg in Webseitenprogrammierung mit Perl (16 answers)
Opened by plinepa at 2013-09-01 16:12

GwenDragon
 2013-09-04 11:00
#169892 #169892
User since
2005-01-17
14578 Artikel
Admin1
[Homepage]
user image
Bei Perl kannst du mit CPAN:HTML::Mason auch Perl-Code direkt in die HTML-Datei schreiben.
Aber sinnvollerweise sollte Code und Inhalt getrennt werden.

Ich arbeite mit CPAN: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
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
Content-Type: text/html; charset=ISO-8859-1

<html>
<head>
<title>Wetteranzeige</title>
<link rel="stylesheet" type="text/css" src="wd.css">
</head>

<body>
<h1>Wetterstation 2</h1>
<p>Hier sind die aktuellen Wetterdaten von 4.Sep.2013 11:1.4</p>
<table>
<caption>Wetterdaten f├╝r Sep/2013</caption>

<tr>

<td>1700</td>

<td>26</td>

</tr>

<tr>

<td>1200</td>

<td>29.3</td>

</tr>

<tr>

<td>1800</td>

<td>24.2</td>

</tr>

<tr>

<td>1600</td>

<td>27.3</td>

</tr>

<tr>

<td>1500</td>

<td>28.8</td>

</tr>

<tr>

<td>1400</td>

<td>31.2</td>

</tr>

<tr>

<td>1300</td>

<td>33.6</td>

</tr>

</table>
</body>
</html>


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

View full thread Einstieg in Webseitenprogrammierung mit Perl