=pod
=head1 NAME
Embperl::Intro - Einleitung für Embperl
=head1 Content
=over 4
=item Was ist Embperl?
=item Perl Code in HTML Dokumente einfügen
=item Meta-Commands
=item Dynamische Tabellen
=item Formularfelder
=item Persistente Daten (Sessions)
=item Aufteilen des Codes in mehrere Komponenten
=item Debugging
=item Datenbankzugriff
=item Sicherheit
=item Escaping/Unescaping
=back
=head1 Was ist Embperl?
=head2 Perl Code in HTML Dokumente einfügen
Die Hauptanwendung von HTML::Embperl ist Perlcode in HTML Dokumente
einzufügen. Embperl kann zwar ebenfalls mit nicht HTML Dokumenten benutzt
werden, hat jedoch einige Features speziell für HTML.
=head2 Zusätzliche HTML Features
Einer der Vorteile von Embperl ist, daß es speziell auf HTML
zugeschnitten ist. Es stellt u.a. Funktionen zur Formularbehandlung und für
HTML Tabellen zur Verfügung, einhergehend mit der Fähigkeit Logdateien
und Fehlerseiten in HTML darzustellen. Ebenso erledigt es die
HTML und URL Kodierung. Dies verhindet jedoch nicht das Embperl mit allen
Arten von Textdateien umgehen kann.
=head2 Integration mit Apache und mod_perl
Embperl kann offline (als normales CGI Skript oder als Modul dessen
Funktionen sich von anderem Perlprogrammen/-modulen aufrufen lassen) benutzt werden,
aber die meisten Möglichkeiten und beste Performance entwickelt es
unter mod_perl und Apache. Dort werden
direkt die Funktionen der Apache API genutzt und mod_perl erlaubt
es den Code vorzukompilieren, um dadurch den Compilierungsvorgang
bei jedem weiterem Request einzusparen.
=head2 Embperl arbeitet mit HTML Editoren
Embperl ist entworfen worden um direkt mit dem von HTML Editoren erzeugten
Code zu arbeiten. Der Perlcode wird dabei als normaler Text eingeben.
Es ist nicht nötig, das der HTML Editor spezielle HTML Tags kennt, noch
müssen diese über umständliche Dialoge eingegeben werden. Embperl
kümmert sich darum, z.B. ein vom HTML Editor erzeugtes < in < umzuwandeln,
bevor es dem Perlinterpreter übergeben wird. Außerdem
entfernt es unerwünschte HTML Tags, z.B. ein , das der Editor
eingefügt hat, weil man eine neue Zeile anfängt, aus dem Perlcode.
=head1 Perl Code in HTML Dokumente einfügen
Perlcode kann auf drei Arten eingebettet werden:
=head2 1.) [- ... -] Führt den Code aus
[- $a = 5 -] [- $b = 6 if ($a == 5) -]
Der Code zwischen [- und -] wird ausgeführt, dabei wird keine Ausgabe
erzeugt. Diese Form eignet sich für Zuweisungen, Funktionsaufrufe,
Datenbankanfrage, usw.
=head2 2.) [+ ... +] Das Ergebnis ausgeben
[+ $a +] [+ $array[$b] +] [+ "A is $a" +]
Der Code zwischen dem [+ und dem +] wird ausgeführt und der Rückgabewert
(der Wert des letzten Perlausdruckes welcher berechnet wurde) wird
ausgegeben (zum Browser gesandt)
=head2 3.) [! ... !] Code nur einmal ausführen
[! sub foo { my ($a, $b) = @_ ; $a * $b + 7 } !]
Genauso wie [- ... -], der Code wird jedoch nur einmal, für den
ersten Request, ausgeführt. Dies ist hauptsächlich für Funktionsdefinitionen
und einmalige Initialisierungen.
=head1 Meta-Commands
Embperl unterstützt einige Meta-Commands um dem "Programmablauf"
innerhalb des Embperldokuments zu steuern. Dies kann mit einem
Preprozessor in C verglichen werden. Die Meta-Commands haben folgende
Form:
[$ $]
=over 8
=item if, elsif, else, endif
Der if Befehl hat die selben Auswirkungen wie in Perl. Er kann genutzt
werden um Teile des Dokuments nur unter bestimmten Bedingungen auszugeben/auszuführen.
Beispiel:
[$ if $ENV{REQUEST_METHOD} eq 'GET' $]
Dies ist ein GET Request
[$ elsif $ENV{REQUEST_METHOD} eq 'POST' $]
Dies ist ein POST Request
[$ else $]
Dies ist weder ein GET noch ein POST Request
[$ endif $]
Dieses Beispiel gibt eine der drei Absätze in Abhänigkeit von dem Wert
von $ENV{REQUEST_METHOD} aus.
=item while, endwhile
Der while Befehl wird dazu benutzt, um eine Schleife innerhalb des
HTML Dokuments zu erzeugen. Beispiel:
[$ while ($k, $v) = each (%ENV) $]
[+ $k +] = [+ $v +]
[$ endwhile $]
Das Beispiel zeigt alle Environementvariablen, jede abgeschlossen
mit einem Zeilenumbruch ( ).
=item do, until
C C erzeugt ebenso eine Schleife, jedoch mit der Bedingung am Ende.
Beispiel:
[- @arr = (3, 5, 7); $i = 0 -]
[$ do $]
[+ $arr[ $i++ ] +]
[$ until $i > $#arr $]
=item foreach, endforeach
Erzeugt eine Schleife, die über jedes Element einer Liste/Arrays iteriert.
Beispiel:
[$ foreach $v (1..10) $]
[+ $v +]
[$ endforeach $]
=item var ...
Standartmäßig ist es nicht nötig irgenwelche Variablen innerhalb einer
Embperlseite zu deklarieren. Embperl kümmert sich darum nach jedem Request
wieder aufzuräumen. Manchmal möchte man jedoch die zu benutzenden Variablen
explizit deklarieren. Dies ist mit var möglich:
[$ var $a @b %c $]
Hat den selben Effekt wie der Perlcode:
use strict ; use vars qw {$a @b %c} ;
=item hidden
hidden ermöglicht es versteckte Formularfelder zu erzeugen und wird weiter unten
im Abschnitt über Formularfelder beschrieben.
=back
=head1 Dynamische Tabellen
Ein sehr leistungsfähiges Feature von Embperl ist das Erzeugen von
dynamischen Tabellen. Am einfachsten lassen sich auf diesem Weg
Perlarrays in Tabellen umwandeln (ein- oder zweidimensional, gleich-
und ungleichmäßige), aber auch andere Datenquellen sind möglich.
=head2 Anzeigen eines Perlarrays
[- @a = ( 'A', 'B', 'C') ; -]
[+ $a[$row] +]
Das obige Beispiel gibt einfach eine Tabelle mit drei Zeilen, welche A, B und
C enthalten aus.
Der Trick dabei ist die Benutzung der magischen Variable B<$row>, welche die
Zeilennummer innerhalb der Tabelle enthält und automatisch für jede Zeile um
eins erhöht wird. Die Tabelle ist zu Ende, wenn der Block, in dem B<$row> auftaucht,
B zurückgibt. Das funktioniert auch mit B<$col> für Spalten und B<$cnt> kann
benutzt werden, wenn die Elemente, nach einer bestimmten Anzahl, in die nächste
Reihe rutschen sollen.
Dies funktioniert ebenso mit C