The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Embperl - Erstellen dynamischer Websites mit Perl

SYNOPSIS

DESCRIPTION

Embperl ist ein System zum Erstellen dynamischer Websites mit Perl.

Für den Anfänger ist es ein einfacher Weg um dynamische Seiten durch Einbetten von Perlcode in HTML zu erstellen. Es stellt verschiedenste Features für das Webumfeld zur Verfügung, wei z.B. dynamischen Tabellen, Formularfeldverarbeitung, HTML/URL-Kodierung, Session Handling, Caching und mehr.

Wenn die Anforderungen steigen ermöglicht es die Website objektorientiert, aus kleinen wiederverwendbaren Komponenten, aufzubauen. Wenn Sie Code und Layout nicht mixen wollen, unterstützt Sie Embperl, indem es erlaubt beides in verschiedene Objekte zu trennen (um z.B. MVC Applikationen zu bauen). Selbstverständlich kann Embperl nicht nur HTML verarbeiten, sondern ist in der Lage Komponenten in verschiedenen Quellenformaten (z.B. HTML, WML, XML, POD, ...) zu bearbeiten und diese, soweit nötig, in andere Ausgabeformate (z.B. via XSLT) zu transformieren. Dies wird dadurch erreicht, das die Ausgabeerzeugung in kleine Schritte zerlegt wird, wovon jeder von einem austauschbaren Provider bearbeitet wird.

Für fortgeschrittenen Anwender bietet Embperl weitere Möglichkeiten, wie das Erstellen von eigenen Grammatiken (z.b. Tag-Bibiliotheken) oder das schreiben von benutzerspezifischen Providern.

Syntax

Embperl versteht zwei Katagorien von Befehlen. Die erste Kategorie sind spezielle Embperl Befehle, die zweite besteht aus einer Reihe von HTML Tags, die spezielle Funktionen anstoßen.

Bevor Embperl Befehle bearbeitet (ebenso für Argumente von HTML Tags, die von Embperl bearbeitet werden), werden alle HTML Tags, die sich innerhalb des Perlcodes befinden, entfernt und HTML kodierte Zeichen werden in ihre Ascii Äquvivalente umgewandelt, so daß sie der Perlinterpreter versteht. Dies ist nötig, um HTML Seiten, die von (WYSIWYG) HTML-Editoren erzeugt werden, zu verarbeiten. (z.B. um ein <BR> innerhalb des Perlcodes zu entfernen, welches der HTML Editor in den Perlcode eingefügt hat, an einer Stelle, wo lediglich ein Zeilenumbruch sein sollte.) Um dieses zu unterbinden, können HTML Tags und HTML kodierten Zeichen (beides nur innerhalb des Perlcodes) ein Backslash ('\') vorangestellt werden.

WICHTIGER HINWEIS: Wenn Sie einen Ascii Editor benutzen, um Ihre HTML Dokumente zu schreiben, sollten Sie die Option optRawInput setzen. Dies verhindert das Embperl den Quellentext in der oben beschriebenen Weise vorverarbeitet.

Sollten Sie Probleme mit Ihrem Code haben, speziell mit HTML Tags oder Dateihandles, versichern Sie sich, daß Sie die Ein- und Ausgabekodierung und -dekodierung, die Embperl durchführt, verstanden haben. Weitere Hinweise finden sich im Abschnitt "Inside Embperl" und in den FAQs.

Alle Embperl Befehle fangen mit einer eckigen Klammer ('[') an und Enden mit der geschlossenen eckigen Klammer (']'). Um eine normale '[' im HTML Text zu erhalten, ist es nötig '[[' zu schreiben.

Embperl benutzt keine HTML Kommentare (z.B. <! ... !>) oder andere spezielle HTML Tags, da es mit manchen HTML Editoren nicht, oder nur sehr umständlich, möglich ist, diese zu erzeugen. Da '[' von den HTML Editoren als normaler Text interpretiert wird, sollte es damit keinerlei Probleme geben, es vereinfacht in den meisten Fällen das schreiben der Dokumente erheblich.

[+ Perl Code +]

Ersetzt den Befehl durch das Resultat der Ausführung des Perl codes. Perl Code kann dabei beliebiger Perl code sein.

Beispiel:

 [+ $a +]        Ersetzt [+ $a +] mit dem Inhalt der Variablen $a.

 [+ $a+1 +]      Beliebige Ausdrücke können benutzt werden.

 [+ $x[$i] +]    Auch Arrays, Hashs oder komplexere Ausdrücke sind kein Problem

HINWEIS: Leerzeichen werden ignoriert. Die Ausgabe wird automatisch HTML kodiert (z.B. wird '<' zu '&lt;'). Die Ausgabekodierung kann mit der Variablen $escmode gesteuert werden.

[- Perl Code -]

Führt den Perl Code aus. In der Ausgabe wird dieser Befehl jedoch vollständig entfernt.

Beispiel:

 [- $a=1 -]            Setzt die Variable $a auf 1.

 [- use SomeModule -]  Andere Perlmodule können genutzt werden.

 [- $i=0; while ($i<5) {$i++} -]  Auch komplexer Code kann verwendet werden.
 

HINWEIS: Perlbefehle, wie if, while, for, etc., müssen innerhalb eines Embperl Blockes abgeschlossen werden. Es ist nicht möglich das if in einem Block zu schreiben und die abschließenden Klammer ('}') in einem anderen Block. Dies ist nur mit "[* Perl Code *]" Blöcken möglich.

HINWEIS: Um Perlfunktionen zu definieren, benutzen Sie "[! Perl Code !]" (siehe unten) da dies vermeidet, dass die Funktion bei jedem Aufruf neu übersetzt wird.

[! Perl Code !]

Wie "[- Perl Code -]" wird aber nur beim ersten Aufruf des Dokuments ausgeführt. Dies kann genutzt werden, um Perlfunktionen zu definieren oder einmalige Initialisierungen auszuführen.

[* Perl Code *]

(ab 1.2b2)

Ähnlich wie [- Perl Code -]. Der Hauptunterschied ist, daß [- Perl Code -] Blöcke immer ihren eigenen Gültigkeitsbereich haben, während [* Perl Code *] Blöcke im selben Gültigkeitsbereich ablaufen. Dies ermöglicht lokale Variablen (mit local) mit einem Gültigkeitsbereich, der die ganze Seite umfasst, zu definieren. Normalerweise ist es nicht nötig lokale Variablen zu definieren, da Embperl jedem Dokument einen eigenen Namensraum zuordnet und die globalen Variablen nach jedem Request wieder aufgeräumt werden. In speziellen Fällen (z.B. um eine Embperl Seite rekursiv mittes Execute aufzurufen), ist es jedoch hilfreich.

Ein zweiter Grund ist, die Möglichkeit Perlbefehle zu nutzen, die sich über mehrere Blöcke hinziehen. Perls if, while, for, etc. können sich nicht über mehrere [- Perl Code -] Blöcke hinziehen, jedoch sehr wohl über mehrere [* Perl Code *] Blöcke.

Beispiel:

  [* foreach $i (1..10) { *]
    
    [- $a = $i + 5 -]
    Schleifenzähler + 5 = [+ $a +] <br>

  [* } *]

Folgendes hingegen funktioniert nicht:

  [- foreach $i (1..10) { -]
    irgendwelcher Text <br>
  [- } -]

Der selbe Effekt kann mit Embperl Meta Commands erzielt werden (siehe unten)

  [$ foreach $i (1..10) $]
    
    [- $a = $i + 5 -]
    Schleifenzähler + 5 = [+ $a +] <br>

  [$ endforeach $]

HINWEIS 1: [* ... *] Blöcke müssen immer mit ;,{ oder } enden!

HINWEIS 2: [* ... *] Blöcke können nicht innerhalb eines HTML Tags, welches von Embperl interpretiert wird, verwendet werden. (Außer die Bearbeitung des entsprechden Tags wurde ausgeschaltet)

HINWEIS 3: Da die Ausführung von [- ... -] Blöcken durch Embperl gesteuert wird, kann Embperl deutlich detailliertere debugging Ausgaben in der Logdatei dafür erzeugen. Außerdem existieren für [- ... -] keinerlei Restriktionen, wo sie genutzt werden können.

[# Text #] (Kommentar)

(ab1.2b2)

Dies ist ein Kommentarblock. Alles zwischen [# und #] wird aus dem HTML Dokument entfernt, bevor es zum Browser gesandt wird.

HINWEIS 1: [* ... *] Blöcke werden vor Kommentarblöcken ausgewertet, deshalb werden sie auch innerhalb von Kommentarblöcken ausgeführt.

HINWEIS 2: Alles innerhalb des Komentarblocks (außer [* ... *]) wird aus dem Quellentext entfernt, deshalb ist es möglich, Teile des Dokuments damit auszukommentieren.

[$ Cmd Arg $] (Meta-Commands)

Ausführen eines Embperl Meta-Commands. Cmd kann einer der folgenden Befehle sein: (Arg variiert, je nach Befehl).

if, elsif, else, endif

Alles nach dem if Meta-Command bis zum else, elsif oder endif wird nur ausgegeben, wenn der Perlausdruck, welcher durch Arg gegeben ist, wahr ist. else und elsif funktionieren entsprechend.

Beispiel:

 [$ if $ENV{REQUEST_METHOD} eq 'GET' $]
 Methode ist GET<BR>
 [$ else $]
 Andere Methode als GET wurde benutzt<BR>
 [$ endif $]

Dieses Beispiel sendet einen der zwei Sätze zum Browser, in Abhänigkeit davon, ob die GET-Methode benutzt wurde, um dieses Dokument abzurufen.

while, endwhile

Führt eine Schleife aus, bis Arg des while Befehls falsch ist.

Beispiel: (siehe auch eg/x/loop.htm aus der Embperl Distribution)

 [- $i = 0; @k = keys %ENV -]
 [$ while ($i &lt; $#k) $]
 [+ $k[$i] +] = [+ $ENV{$k[$i]} +]<BR>
 [- $i++ -]
 [$ endwhile $]

Dies sendet alle Umgebungsvariablen zum Browser.

HINWEIS: '&lt;' wird zu '<' bevor es vom Perlinterpreter ausgeführt wird, außer optRawInput ist gesetzt.

do, until

Führt eine Schleife aus, bis Arg des until Befehls wahr ist.

Beispiel:

 [- $i = 0 -]
 [$ do $]
     [+ $i++ +] <BR>
 [$ until $i > 10 $]
foreach, endforeach

Führt eine Schleife aus, für jedes Element des Array, welches als zweites in Arg steht, wobei die Variable, die als erstes in Arg angegeben ist, auf den entsprechenden Wert gesetzt wird.

Beispiel:

 [- @arr = (1, 3, 5) -]
 [$ foreach $v @arr $]
     [+ $v +] <BR>
 [$ endforeach $]
next

Hat die selbe Funktion wie das Perl next statement. Es kann auch folgende Syntax benutzt werden, wodurch eine zusätzliche Bedingung (oder anderer Perlcode) eingefügt werden kann:

    [* next if ($foo) *]
last

Hat die selbe Funktion wie das Perl last Statement. Es kann auch folgende Syntax benutzt werden, wodurch eine zusätzliche Bedingung (oder anderer Perlcode) eingefügt werden kann:

    [* last if ($foo) *]
redo

Hat die selbe Funktion wie das Perl redo statement. Es kann auch folgende Syntax benutzt werden, wodurch eine zusätzliche Bedingung (oder anderer Perlcode) eingefügt werden kann:

    [* redo if ($foo) *]
hidden

Arg gibt keinen, einen oder zwei Hashs an (mit oder ohne führendes '%' Zeichen) und ein optionales Array als dritten Parameter. hidden erzeugt versteckte Eingabefelder für alle Werte, die im ersten Hash, jedoch nicht im zweiten Hash, enthalten sind. Default ist %fdat und %idat. Wenn der dritte Parameter angegeben ist, gibt er die Reihenfolge der Felder an. Default ist @ffld. Wenn Sie keine Parameter angeben, erzeugt Embperl für alle Werte, die an dieses Dokument geschickt wurden (in %fdat stehen), verstecke Eingabefelder, soweit dafür nicht schon andere Eingabefelder existieren. Dies ist nützlich, um Werte zwischen mehreren Formularen zu transportieren.

Beispiel: (siehe auch eg/x/input.htm aus der Embperl Distribution)

    <FORM ACTION="inhalt.htm" METHOD="GET">
        <INPUT TYPE="TEXT" NAME="field1">
    [$ hidden $]
    </FORM>

Wenn Sie dieses Dokument mit

    http://host/doc.htm?field1=A&field2=B&field3=C

aufrufen, erzeugt Embperl folgende Ausgabe:

    <FORM ACTION="inhalt.htm" METHOD="GET">
        <INPUT TYPE="TEXT" NAME="feld1" VALUE="A">
        
    <INPUT TYPE="HIDDEN" NAME="field2" VALUE="B">
    <INPUT TYPE="HIDDEN" NAME="field3" VALUE="C">
    </FORM>
var

Das var Meta-Command definert eine oder mehrere Variablen zur Benutzung innerhalb dieser Embperlseite und setzt das strict Pragma. Die Variablennamen müssen durch Leerzeichen getrennt werden.

Beispiel:

        [$var $a %b @c $]

Dies entspricht dem folgendem Perl code:

        use strict ;
        use vars qw($a %b @c) ;

HINWEIS: 'use strict' innerhalb eines Embperl Dokuments gilt nur innerhalb des Blockes, in dem es erscheint.

sub

(ab Embperl 1.2b5)

Definiert eine Embperl-Funktion. Beispiel:

  [$ sub foo $]
    <p> Hier steht was </p>
  [$ endsub $]

Diese Funktion kann entweder als normale Perlfunktion aufgerufen werden:

  [- foo -]

oder mittels der Embperl::Execute Funktion.

  [- Execute ('#foo')           # Kurzform -]
  [- Execute ({ sub => 'foo'})  # Langform -]

Der Unterschied ist, das Embperl nach dem Aufruf einer Embperl-Funktion mittels Execute, die internen Zustände (Optionen, Debugflags etc.) wieder auf die Werte vor dem Aufruf zurücksetzt. Außerdem ist es möglich mittels Execute rekursive Funktionsaufrufe zu implementieren.

Es ist ebenfalls möglich Parameter an eine Embperl-Funktion zu übergeben:

  [$ sub foo $]
    [- $p = shift -]
    <p> Hier zeigen wir den ersten Parameter [+ $p +]</p>
  [$ endsub $]

  
  [- foo ('value') -]

Wenn Sie eine Reihe von oft benötigten Funktionen haben, können Sie sie in einer Embperl Datei definieren und in Ihre Dokumente importieren:

  [- Execute ({ inputfile => 'mylib.htm', import => 1 }) -]

Dies importiert alle Embperl-Funktionen, die in der Datei mylib.htm definiert sind, in die aktuelle Seite, wo sie dann als normale Perlfunktionen aufgerufen werden können.

HTML Tags

Embperl behandelt die folgenden HTML Tags speziell.

TABLE, /TABLE, TR, /TR

Embperl kann dynamische Tabellen erzeugen (ein- oder zweidimensional). Dazu ist es lediglich nötig, eine Zeile oder Spalte anzugeben, Embperl expandiert die Tabelle so weit wie nötig. Dies geschieht durch die Benutzung der "magischen" Variablen $row, $col oder $cnt. Solange Sie nicht eine der drei Variablen innerhalb einer Tabelle benützen, läßt Embperl die Tabelle unverändert.

Embperl überprüft ob $row, $col oder $cnt benutzt werden und wiederholt allen Text zwischen <TABLE> und </TABLE>, solange der Block in dem $row oder $cnt enthalten sind, ein Ergebnis ungleich undef zurück gibt. Aller Text zwischen <TR> und </TR> wird wiederholt, wenn die Variable $col benutzt wird und der Block, indem sie vorkommt, einen definierten Rückgabewert hat. Rückgabewert ist dabei immer das Ergebnis des letzten Ausdrucks innerhalb des Blocks.

Mittels $tabmode (siehe unten) kann das Tabellenendekriterium variiert werden.

Beispiel: (siehe eg/x/table.htm in der Embperl Distribution für weitere Beispiele)

 [- @k = keys %ENV -]
 <TABLE>
     <TR>
         <TD>[+ $i=$row +]</TD>
         <TD>[+ $k[$row] +]</TD>
         <TD>[+ $ENV{$k[$i]} +]</TD>
     </TR> 
 </TABLE>

Der obige Code zeigt alle Elemente des Array @k (das die Schlüssel von %ENV enthält) an, so dass alle Umgebungsvariablen (wie im Beispiel zu while) angezeigt werden. Dabei enthält die erste Spalte den Index (ab Null zählend), die zweite Spalte den Variablennamen und die dritte Spalte den Wert der Umgebungsvariablen.

TH, /TH

Das <TH> Tag wird als Tabellenüberschrift interpretiert. Wenn die ganze Zeile aus <TH> und </TH>, statt aus <TD> und </TD> besteht, werden die Zellen als Spaltenüberschriften interpretiert und nur einmal ausgegeben.

DIR, MENU, OL, UL, DL, SELECT, /DIR, /MENU, /OL, /UL, /DL, /SELECT

Listen, Menüs und Listboxen werden genau wie eindimensionale Tabellen behandelt. Nur "$row", "$maxrow", "$col", "$maxcol" und "$tabmode" werden beachtet, $col und $maxcol werden ignoriert. Siehe auch eg/x/lists.htm aus der Embperl Distribution für ein Beispiel.

OPTION

Embperl prüft ob ein Wert für die entsprechende Option in den Formulardaten (%fdat) vorhanden ist. Wenn ja wird die Option als ausgewählt angezeigt.

Beispiel:

    <FORM METHOD="POST">
      <P>Select Tag</P>

      Wenn Sie dieses Dokument mit list.htm?SEL1=x aufrufen,
      können Sie die Option bestimmen, die angewählt erscheint.

      <P><SELECT NAME="SEL1">
         <OPTION VALUE="[+ $v[$row] +]">
            [+ $k[$row] +]
         </OPTION>
      </SELECT></P>
    </FORM>
INPUT

Das INPUT Tag arbeitet mit den Hashs %idat und %fdat zusammen. Wenn das INPUT Tag kein VALUE Attribute hat, jedoch in %fdat ein Element, das dem NAME Attribute entspricht, existiert, erzeugt Embperl ein VALUE Attribute mit dem Wert aus %fdat. Alle Werte der INPUT Tags werden in dem Hash %idat, mit dem Namen des INPUT Tags als Schlüssel und ihrem Wert, gespeichert. Für Radiobuttons und Checkboxen (TYPE=RADIO und TYPE=CHECKBOX), wird das CHECKED Attribute eingefügt, wenn der Wert des VALUE Attributes mit dem Wert in %fdat übereinstimmt, andernfalls wird CHECKED entfernt.

Das bedeutet, wenn Sie die Formulardaten an das Dokument selbst schicken (die URL des ACTION Attributes entspricht dem aktuellen Dokument oder fehlt ganz), zeigen alle INPUT Tags automatisch die selben Werte an, die der Benutzer vor dem Absenden eingegeben hat.

TEXTAREA, /TEXTAREA

Das TEXTAREA Tag wird genau wie ein normales INPUT Tag behandelt (siehe oben)

META HTTP-EQUIV= ...

META HTTP-EQUIV= ... überschreibt den entsprechenden HTTP Header. Dies verhindert, das Netscape nachfragt, ob das Dokument neu geladen werden soll, wenn der Content-Type zwischen META HTTP-EQUIV und HTTP Header unterschiedlich ist.

Dies kann ebenfalls benutzt werden, um beliebige HTTP Header zu setzen. Unter mod_perl können HTTP Header auch mit der Funktion header_out gesetzt werden.

Beispiel:

    <META HTTP-EQUIV="Language" CONTENT="DE">

Das entspricht der Apachefunktion:

    [- $req_rec ->  header_out("Language" => "DE"); -]
A, EMBED, IMG, IFRAME, FRAME, LAYER

Die Ausgaben von Perlblöcken innerhalb des HREF Attributes des A Tags und des SRC Attributes der anderen Tags werden URL Kodiert, statt HTML Kodiert. (siehe auch $escmode). Des weiteren expandiert Embperl Array- und Hashreferenzen innerhalb solcher URLs zur URL Parametersyntax. Beispiel:

  [-
  $A = {A => 1, B => 2} ;  # Hashreference
  @A = (X, 9, Y, 8, Z, 7)
  -]

  <A HREF="http://localhost/tests?[+ $A  +]">
  <A HREF="http://localhost/tests?[+ \@A +]">

wird von Embperl zu Folgendem expandiert:

  <A HREF="http://localhost/tests?A=1&B=2">
  <A HREF="http://localhost/tests?X=9&Y=8&Z=7">

Gültigkeitsbereiche von Variablen und Cleanup

Der Gültigkeitsbereich von Variablen, die mit my oder local deklariert wurden, endet am Ende des umschließenden [+/- ... -/+] Blocks. Der [+/- ... -/+] Block verhält sich in dieser hinsicht wie Perls { ... }.

Globale Variablen (alles was nicht mittels my oder local deklariert wurde) werden am Ende jedes Request automatisch wieder gelöscht (insofern verhalten sie sich wie Variablen, deren Gültigkeitsbereich das gesamte Dokument ist). Dies verhindert Probleme mit Variablen, die ihren Wert aus dem vorangegangenen Request behalten haben. Das Cleanup wird nur für Variablen innerhalb des Packages, der gerade ausgeführten Embperlseite, durchgeführt, d.h. alle Variablen die ohne expliziten Packagenamen deklariert wurden. Alle Variablen in anderen Packages (z.B. andere Perl Module) bleiben gültig.

Der Packagename der aktuellen Seite wird normalerweise von Embperl eindeutig vergeben, kann aber mittels EMBPERL_PACKAGE explizit angegeben werden.

Da CGI Skripte sowieso immer als eigenständiger Prozeß ausgeführt werden, ist ein Cleanup bei CGI Skripten nicht nötig.

Sollen Variablen nicht am Ende des Request aufgeräumt werden, müssen sie entweder im Hash %CLEANUP (mit Wert 0) eingetragen sein oder innerhalb eines anderen Packages (z.B. $Persistent::handle) deklariert werden.

Wenn Sie das strict Pragma (use strict) nutzen wollen, können sie Ihre Variablen mittels des var Meta-Commands deklarieren.

HINWEIS: Da Apache::DBI, wie jedes andere Perlmodul, seinen eigenen Namensraum hat, funktioniert es ohne Problem zusammen mit Embperl.

Das automatische Cleanup kann mittels EMBPERL_OPTIONS bzw. dem cleanup Parameter der Execute Funktion abgeschaltet werden.

Ausnahmen für Variablen, die nicht oder zusätzlich aufgeräumt werden sollen, können mittels des Hash %CLEANUP angegeben werden.

Es ist ebenfalls möglich eine Funktion aufrufen zulassen, wenn Embperl sein Cleanup durchführt. Soweit definiert, wird die Funktion CLEANUP aufgerufen, direkt bevor die weiteren Variablen aufgeräumt werden.

 Beispiel:

  [! sub CLEANUP { $obj -> term ; } !]

Vordefinierte Variablen

Embperl hat einige spezielle Variablen mit einer vorgegebenen Bedeutung.

%ENV

Enthält die selben Umgebungsvariablen, wie bei einem CGI Skript.

$epreq

Enthält eine Referenz auf das Embperl Request Object. Dies ist dasselbe wie wenn man $epreq = shift am Seitenanfang schreibt.

$epapp

Enthält eine Referenz auf das Embperl Application Object. Dies ist dasselbe wie $epreq - app> zurückliefert.

%fdat

Enthält alle Formulardaten, die an das Dokument gesendet wurden. Das NAME Attribute bildet den Schlüssel und das VALUE Attribute den Wert des Hashelements. Dabei ist es egal, ob die Daten mittels GET oder POST übetragen wurden. Existieren mehrere Werte mit dem selben Namen, werden diese mittels TAB getrennt. Diese können z.B. mittels folgenden Code in ein Array zerlegt werden:

  @array = split (/\t/, $fdat{'fieldname'}) ;

Embperl unterstützt ebenfalls den Kodierungstyp multipart/form-data, der für Dateiuploads benutzt wird. Das Element in %fdat enthält dann eine Dateihandle (entsprechend CGI.pm), die benutzt werden kann, um die Datei auszulesen.

Dateiupload Beispiel:

HTML Formular:

    <FORM METHOD="POST" ENCTYPE="multipart/form-data">
      <INPUT TYPE="FILE" NAME="ImageName">
    </FORM>

Embperl ACTION:

    [- if (defined $fdat{ImageName}) {
         open FILE, "> /tmp/file.$$";
         print FILE $buffer
           while read($fdat{ImageName}, $buffer, 32768);
         close FILE;
       }
    -]
        

Wenn CGI.pm 2.46 oder höher installiert ist, ist es weiterhin möglich den Dateinamen (den lokalen Dateinamen, wie er auf seiten des Browsers heißt) und Informationen, die von der CGI.pm Funktion uploadInfo zur Verfügung gestellt werden, zu erhalten. Der Dateiname ist in dem entsprechenden %fdat Element direkt enthalten. Um auf die uploadInfos zuzugreifen, muß man dem Feldnamen einen Bindestrich voranstellen:

Beispiel:

  # ImageName ist der NAME des Feldes. 
  # Er durch den im HTML Code angegeben ersetzt werden.
  Dateiname:     [+ $fdat{ImageName} +] <br>
  Content-Type:  [+ $fdat{-ImageName} -> {'Content-Type'} +] <br>

HINWEIS: Der Zugriff auf die Upload-Infos erfolgte vor 1.2b11 auf andere Art und Weise, die nicht mehr unterstützt wird.

HINWEIS: Dies funktioniert ebenfalls in die andere Richtung. Bei Inputtags deren Name einem %fdat Schlüssel entspricht und die kein Value Attribute haben wird automatisch der Wert aus %fdat als Value eingesetzt. Siehe "HTML Tags" INPUT/OPTION/TEXTAREA.

@ffld

Enthält alle Formularfeldnamen in der Reihenfolge, wie sie vom Browser geschickt wurden. Dies entspricht normalerweise der Reihenfolge, wie sie im Formular erscheinen.

%idat

Enthält alle Werte von allen INPUT, TEXTAREA und SELECT/OPTION Tags, die in der Seite vorangehen.

%udat (ab 1.2b1)

Sie können %udat benutzen, um Daten pro Benutzer zu speichern. Solange Sie nicht auf %udat zugreifen passiert gar nichts, sobald jedoch Daten in %udat geschrieben werden, erzeugt Embperl eine Session Id und sendet sie mittels eines Cookies zum Browser. Die Daten die in %udat abgelegt wurden, werden mittels Apache::Session gespeichert. Wenn der selbe Benutzer die nächste Embperl Seite aufruft, sendet der Browser den Cookie mit der Session Id zurück und Embperl stellt die Daten in %udat wieder her. (siehe auch Abschnitt über "Session Handling")

%mdat (ab 1.2b2)

%mdat speichert Daten je Seite. Solange Sie nicht auf %mdat zugreifen passiert gar nichts, sobald jedoch Daten in %mdat geschrieben werden, erzeugt Embperl eine Seiten Id und speichert die Daten mittels Apache::Session. Wenn ein Benutzer die selbe Embperl Seite aufruft, stellt Embperl die Daten in %mdat wieder her. (siehe auch Abschnitt über "Session Handling")

$row, $col

Reihen und Spaltenzähler für dynamische Tabellen. (Siehe "HTML Table Tag".)

$maxrow, $maxcol

Maximale Anzahl von Reihen oder Spalten einer dynamischen Tabelle. Diese Werte werden per default auf 100 für $maxrow und 10 für $maxcol gesetzt um Endlosschleifen zuverhindern. (Siehe "HTML Table Tag".)

$cnt

Enthält die Anzahl der Tabellenzellen, die bis jetzt angezeigt wurden. (Siehe "HTML Table Tag".)

$tabmode

Entscheidet, wann das Tabellenende erreicht ist. Dynamische Tabellen werden immer durch $maxrow und $maxcol begrenzt. Zusätzlich können folgende Bedinungen für das Tabellenende festgelegt werden:

$tabmode = 1

Ende, wenn ein Block der $row enthält, undef als Ergebnis hat. Die Reihe, die den undefinierten Ausdruck enthält, wird nicht mehr angezeigt.

$tabmode = 2

Ende, wenn ein Block der $row enthält, undef als Ergebnis hat. Die Reihe, die den undefinierten Ausdruck enthält, wird angezeigt.

$tabmode = 4

Ende, wenn $maxrow Reihen angezeigt wurden.

Spaltenende:

$tabmode = 16

Ende, wenn ein Block der $col enthält, undef als Ergebnis hat. Die Spalte, die den undefinierten Ausdruck enthält, wird nicht mehr angezeigt.

$tabmode = 32

Ende, wenn ein Block der $col enthält, undef als Ergebnis hat. Die Spalte, die den undefinierten Ausdruck enthält, wird angezeigt.

$tabmode = 64

Ende, wenn $maxcol Spalten angezeigt wurden.

Der Defaultwert von 17 ist korrekt zum Anzeigen von Arrays. Es dürfte selten nötig sein diesen Wert zu ändern. Die Werte für Tabellen- und Spaltenende können addiert werden.

$escmode

Schaltet die HTML und URL Kodierung der Ausgabe ein und aus. Default ist ein ($escmode = 3).

Hinweis: Normalerweise kann die Kodierung durch Voranstellen eines Backslashes ('\') vor das entsprechende Zeichen verhindert werden. Das ist recht nützlich, ist aber in Situation, wo eine Benutzereingabe nochmal angezeigt wird, sehr gefährlich, da dies dem Benuter ermöglich beliebiges HTML einzugeben. Um dies zu verhindern muß zu den unten aufgeführten Werten jeweils eine 4 addiert werden. Dies führt dazu, dass Embperl den Backslash bei der Ausgabe nicht gesondert behandelt. (ab 1.3b4)

Hinweis 2:Um binäre Daten auszugeben muß escmode auf Null gesetzt werden (ab 1.3b6)

$escmode = 8 (oder 15) (2.0b4 und höher)

Das Resultat von Perlausdrücken wird immer XML Kodiert (z.B. '>' wird zu '&gt;' und ' zu &apos;).

$escmode = 3 (oder 7)

Das Resultat von Perlausdrücken wird HTML Kodiert (z.B. '>' wird zu '&gt;') und URL Kodiert ('&' wird zu '%26') innerhalb von A, EMBED, IMG, IFRAME, FRAME und LAYER Tags.

$escmode = 2 (oder 6)

Das Resultat von Perlausdrücken wird immer URL Kodiert ('&' wird zu '%26').

$escmode = 1 (oder 5)

Das Resultat von Perlausdrücken wird immer HTML Kodiert (z.B. '>' wird zu '&gt;').

$escmode = 0

Keine HTML oder URL Kodierung findet statt.

$req_rec

Diese Variable ist nur vorhanden, wenn Embperl unter mod_perl läuft und enthält eine Referenz auf den Apache Request Record. Damit ist es möglich, alle Apache internen Funktionen zu nutzen. (siehe perldoc Apache für weitere Informationen)

LOG

Dies ist die Dateihandle der Embperl Logdatei. Durch schreiben auf diese Dateihandle ist es möglich, Zeilen in die Embperl Logdatei zu schreiben.

Beispiel: print LOG "[$$]ABCD: your text\n" ;

Wenn Sie ein Modul schreiben, das ebenfalls die Embperl Logdatei nutzen soll, können Sie folgendermaßen eine Dateihandle dafür bekommen:

    tie *LOG, 'Embperl::Log';

OUT

Diese Dateihandle ist an den Embperl Ausgabestrom gebunden. Ausgaben an diese Handle haben den selben Effekt wie ein [+ ... +] Block. (Siehe auch optRedirectStdout)

@param

Wird durch den param Parameter der Execute Funktion gesetzt. Kann genutzt werden, um Parameter an ein Embperl Dokument zuübergeben oder zurückzugegben. (siehe Execute)

%http_headers_out (ab 1.2b10)

Dieser Hash ermöglicht es HTTP Header anzugeben, die Embperl vor dem Dokument senden soll.

Ist ein "Location" Header angegeben, setzt Embperl den Status automatisch auf 301. Beispiel:

  [- $http_headers_out{'Location'} = "http://www.ecos.de/embperl/" -]

Wird ein Array als Location angeben, gibt das zweite Element den Status Code an:

  [- $http_headers_out{Location} = [ "http://www.ecos.de/embperl/", 303 ]; -]

Ab 1.3.2 können alle HTTP Header (außer "Content-Type") auch mehrere Werte erhalten. Um z.B. mehrere Cookie zu setzen, kann man folgendes schreiben:

  [- $http_headers_out{'Set-Cookie'} = 
      ['name=cook1;value=2;','name=cook2;value=b'] ; -]

Für "Location" und "Content-Type" wird nur der erste Wert berücksichtigt. Leere Arrays werden ignoriert. Z.B. führt Folgendes nicht zu einem Redirect:

  [- $http_headers_out{'Location'} = [] ; -]

siehe auch "META HTTP-EQUIV= ..."

$optXXX $dbgXXX

Alle Optionen (see "EMBPERL_OPTIONS") und alle Debugflags (siehe "EMBPERL_DEBUG") können durch entsprechende Variablen innerhalb der Seite gelesen und gesetzt werden.

Beispiel:

    [- $optRawInput = 1 -]  # Anschalten von RawInput 
    [- $optRawInput = 0 -]  # Abschalten von RawInput 
    [+ $dbgCmd +]           # Ausgeben des Zustandes des dbgCmd Flags

Es gibt einige Ausnahmen, bei denen die Optionen lediglich gelesen werden können. Das Setzen solcher Optionen ist nur in den Konfigurationsdateien möglich. Folgende Optionen können nur gelesen werden:

$optDisableVarCleanup
$optSafeNamespace
$optOpcodeMask
$optDisableChdir
$optEarlyHttpHeader
$optDisableFormData
$optAllFormData
$optRedirectStdout
$optAllowZeroFilesize
$optKeepSrcInMemory

%CLEANUP

Embperl räumt nur Variablen auf, die innerhalb der Embperl Seite definiert wurden. Sollen weitere Variablen aufgeräumt werden, können diese dem Hash %CLEANUP, mit dem Variablennamen als Schlüssel und einem Wert von 1, hinzugefügt werden. Umgedreht ist es möglich das Aufräumen zu verhindern, wenn der Variablennamen mit einem Wert von 0 hinzugefügt wird.

%CLEANUPFILE (ab 1.2b6)

Hat die selbe Aufgabe wie %CLEANUP, jedoch können hier Dateinamen hinzugefügt werden und alle Variable die in diesen Dateien definiert wurden, werden am jedes des entsprechenden Requests aufgeräumt.

Session Handling (ab 1.2b2)

Embperl ist in der Lage, Daten pro Benutzer für Sie zu verwalten. Sobald Sie Daten in den Hash %udat schreiben, sorgt Embperl dafür, dass die selben Daten wieder verfügbar sind, sobald der selbe Benutzer eine weitere Seite aufruft.

Weiterhin können Sie Daten in dem Hash %mdat ablegen, diese sind der aktuellen Seite zugeordnet und werden wieder hergestellt, sobald ein beliebiger Benutzer die selbe Seite aufruft.

Im Gegensatz zu einfachen globalen Variablen, ist der Zugriff auf die Inhalte von %udat und %mdat bei entsprechender Konfiguration, auch über Prozeß- oder sogar Rechnergrenzen hinweg möglich. Embperl bedient sich dazu des Perlmodules Apache::Session.

Ab 1.3.4 verwendet Embperl Apache::SessionX für das Sessing handling. Dadurch ist keine weitere Konfiguration mehr nötig. Wenn Sie das alte Sessionhandling (ohne Apache::SessionX) beibehalten wollen, müssen Sie

    PerlSetEnv EMBPERL_SESSION_HANDLER_CLASS Embperl::Session

in Ihrer httpd.conf eintragen und folgende Parameter konfigurieren. Sie können die folgenden Parameter auch zum überschreiben der Standardkonfiguration von Apache::SessionX benutzen.

Um das Session Management zu aktivieren muß Apache::Session (Version 1.53 oder höher) installiert sein. Außerdem müssen Sie Embperl, via EMBPERL_SESSION_CLASSES, mitteilen, welcher Speicher- und Lockingmechanismus genutzt werden soll, ggf. müssen Sie auch weitere Argumente für Apache::Session setzen. Um z.B. eine MySQL Datenbank zur Speicherung der Sessions zu benutzen, könnte die Datei startup.pl folgendermaßen aussehen:

 BEGIN
    {
    $ENV{EMBPERL_SESSION_CLASSES} = "MySQL Semaphore" ;
    $ENV{EMBPERL_SESSION_ARGS}    = "DataSource=dbi:mysql:session UserName=test" ;
    } ;
 use Embperl ;

Dass selbe kann stattdessen auch direkt in die httpd.conf eingetragen werden:

 PerlSetEnv EMBPERL_SESSION_CLASSES "MySQL Semaphore"
 PerlSetEnv EMBPERL_SESSION_ARGS "DataSource=dbi:mysql:session UserName=test"
 PerlModule Embperl ;

Konsultieren Sie die Dokumentation von Apache::Session (in diesem Fall Apache::Session::Store::MySQL) für Informationen wie die Datenbanktabellen dazu aussehen müssen.

EMBPERL_SESSION_ARGS ist eine Leerzeichen separierte Liste von Name/Wert Paaren die zusätzlich Parameter für die Apache::Session Klassen angeben können.

Hier ist ein weiteres Beispiel für die Speicherung der Sessiondaten im Dataisystem:

PerlSetEnv EMBPERL_SESSION_CLASSES "File Semaphore" PerlSetEnv EMBPERL_SESSION_ARGS "Directory=/path/to/your/sessions"

Konsultieren Sie die Dokumentation von Apache::Session um zu erfahren welche weiteren Speichermöglichkeiten es gibt.

Zusätzlich (optional) zur zur Speicher- und Lockingklasse können in EMBPERL_SESSION_CLASSES zwei weitere Klassen angegeben werden. Die erste ist für die Serialisierung der Daten zuständig (Default: Storable) und die zweite für sas erzeugen der ID (Default: MD5).

HINWEIS: Die obige Konfiguration funktioniert nur mit Apache::Session 1.52 und Embperl 1.3b5 oder höher. Ältere Konfigurationen mit Apache::Session werden weiterhin unterstützt, Ältere Versionen von Embperl unterstützen nur Apache::Session 1.0x, welches eine andere Konfiguartion von $ENV{EMBPERL_SESSION_CLASSES} erfordert (z.B. $ENV{EMBPERL_SESSION_CLASSES} = "DBIStore SysVSemaphoreLocker" ; ).

Damit ist das Session Handling eingerichtet und der Benutzung der Hashs %udat und %mdat steht nichts mehr im Wege. Dabei wird das Session Handling nur dann aktiv, wenn Sie auf einen der zwei Hashs zugreifen. Beim ersten Zugriff erzeugt Embperl bzw. Apache::Session eine Session ID. Für Benutzerbezogene Session wird diese Id mittels eines Cookies zum Browser gesandt. Außerdem veranlasst Embperl Apache::Session die Daten zu speichern. Empfängt Embperl einen solchen Cookie mit einer Id, wird diese zunächst nur abgespeichert, erst bei einem Zugriff auf %udat, werden die Daten tatsächlich von Apache::Session angefordert. Ebenso werden die Daten für %mdat erst von Apache::Session angefordert, wenn auf diesen Hash zugegriffen wird.

Funktionen/Methoden fürs Session Handling

Embperl::Req::SetupSession ($req_rec, $Inputfile) [1.3b6+]

Diese Funktion kann von Skripten benutzt werden die in ihrem Verlauf Embperl::Execute aufrufen, jedoch vorher schon auf die Sessiondaten von Embperl zugreifen wollen.

$req_rec

Apache request record soweit das Skript unter mod_perl läuft, ansonsten undef.

$Inputfile

Name der Datei die später von Embperl bearbeitet werden soll. Dient dazu %mdat zu initialsieren. Wird %mdat nicht benötigt, kann dieser Parameter weggelassen werden.

Liefert eine Referenz auf %udat oder, wenn es in einem Arraykontext aufgerufen wird, eine Referenz auf %udat und %mdat zurück. Siehe auch CleanupSession.

Embperl::Req::GetSession / $r -> GetSession [1.3b6+]

Liefert eine Referenz auf %udat oder, wenn es in einem Arraykontext aufgerufen wird, eine Referenz auf %udat und %mdat zurück. Dies Funktion kann benutzt werden um auf die Embperl Sessiondaten aus einem Modul zuzugreifen, wenn das Session Handling bereits initialisiert ist. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.

Embperl::Req::CleanupSession / $r -> CleanupSession [1.3b6+]

Muß am Ende jedes Skripts aufgerufen werden, welches SetupSession benutzt, danach aber nicht Embperl::Execute aufruft. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.

Embperl::Req::DeleteSession / $r -> DeleteSession [1.3b6+]

Löscht die Sessiondaten und entfernt den Cookie vom Browser. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.

Embperl::Req::RefreshSession / $r -> RefreshSession [1.3b6+]

Stößt das nochmalige senden des Cookies an. Normalerweise wird der Cookie nur beim ersten Mal gesendet. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.

Embperl::Req::SetSessionCookie / $r -> SetSessionCookie [1.3b7+]

Muß von Skripts aufgerufen werden, welches SetupSession benutzen, danach aber nicht Embperl::Execute aufrufen, um den Cookie für sie Session-Id zu setzen. Dies wird normalerweise durch Embperl::Execute erledigt. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.

(Sichere-)Namensräume und Opcode Restriktionen

Da die meisten Web Server mehr als ein Dokument verwalten, ist es nötig, die Dokumente gegeneinander zu schützen. Embperl benutzt dazu Perl Namensräume (Packages). Standardmäßig führt Embperl jedes Dokument in seinem eigenen Namensraum aus. Das verhindert, das globale Variablen, sich gegenseitig überschreiben oder beeinflussen. Mittels der Konfigurationsanweisung EMBPERL_PACKAGE ist es möglich einen expliziten Packagenamen für ein oder mehere Dokumente vorzugeben. Dies alles verhindert aber nicht, das durch die Angabe eines Variablennamen incl. Packagenamen eine Embperlseite auf andere Namensräume zugreifen kann.

Manchmal, z.B. wenn mehrere Personnen Zugriff auf die Webserverinhalte haben sollen, ist es notwendig Dokumente tatsächlich gegenseitig zuschützen. Für solche Fällen kann Embperl Safe.pm nutzen um sichere Namensräume bereit zu stellen. Ein Dokument, das in einem solchen sicheren Namensraum abläuft, kann dann nicht mehr auf andere Namensräume zugreifen. (Für weitere Informationen zu sicheren Namensräumen lesen Sie bitte die Dokumentation zu Safe.pm)

Um ein Dokument in einem sicheren Namensraum ablaufen zu lassen, müssen Sie lediglich die Option optSafeNamespace setzen. Der Packagename wird dabei weiterhin automatisch von Embperl erzeugt oder kann mittels EMBPERL_PACKAGE gesetzt werden.

HINWEIS: Für das ausgeführte Dokument erscheint es so, als würde der Code im Package main ausgeführt!

Eine weitere Möglichkeit, um Embperl Seiten sicher zu machen, ist die Benutzung von Opcode Restriktionen. Dazu ist es nötig, zuerst ein Safe Compartment zu erstellen:

 B<$cp = Embperl::AddCompartment($name);>

Dies erstellt ein neues Compartment mit einer Default Opcode Maske und dem Namen $name (Der Name wird später verwendet, damit Embperl weiss, welches Compartment es benutzen soll). Nun können Sie die Opcode Maske ändern. Zum Beispiel:

 B<$cp->deny(':base_loop');>

In Ihrer Konfiguration müssen Sie die Option optOpcodeMask in EMBPERL_OPTIONS setzen und spezifizieren aus welchem Compartment die Opcode Maske (durch setzen von EMBPERL_COMPARTMENT) genommen werden soll.

Beispiel (beim Gebrauch mit mod_perl):

  B<srm.conf:>

    PerlScript startup.pl

    SetEnv EMBPERL_DEBUG 2285

    Alias /embperl /path/to/embperl/eg

    <Location /embperl/x>
    SetHandler perl-script
    PerlHandler Embperl
    Options ExecCGI
    PerlSetEnv EMBPERL_OPTIONS 12
    PerlSetEnv EMBPERL_COMPARTMENT test
    </Location>

  B<startup.pl:>

    $cp = Embperl::AddCompartment('test');
    $cp->deny(':base_loop');

Beim Starten des Server wird dadurch die Datei startup.pl ausgeführt. startup.pl erstellt einen Compartment mit Namen 'test', in dem Schleifen gesperrt sind. Alle Seiten die unter /embperl/x liegen, werden nun in einem sicheren Namensraum, mit gesperrten Schleifen, ausgeführt.

Hinweis: Das Package Name des Compartments wird nicht genutzt!

Mehr Information zum Setzen der Opcode Mask finden Sie in der Dokumentation von Safe.pm und Opcode.pm.

Utility Funktionen

AddCompartment($Name)

Fügt ein Compartment zum Gebrauch mit Embperl hinzu. Embperl nutzt nur die Opcode Maske und nicht den Packagenamen des Compartements. AddCompartment gibt den neu erstellten Compartment zurück, so daß die Methoden zum Freigeben oder Sperren bestimmter Opcodes aufgerufen werden können. (siehe auch "(Sichere-)Namesräume und Opcode Restriktionen")

Beispiel:

        $cp = Embperl::AddCompartment('TEST');
        $cp->deny(':base_loop');

MailFormTo($MailTo, $Subject, $ReturnField)

Sendet den Inhalt des Hashs %fdat, in der durch @ffld angegebenen Reihenfolge, zur, durch $MailTo angegeben, E-Mail Adresse, mit $Subject als Betreff. Ist $ReturnField angegeben, wird die in diesem Feld enthaltene E-Mail Adresse als Return-Path in der Mail angegeben. $ReturnField sollte normalerweise das Feld angeben in das der Benutzer seine E-Mail Adresse einträgt.

Wenn Sie nachfolgenden Beispielcode als Action in Ihrem Formular angeben:

  <FORM ACTION="x/feedback.htm" METHOD="POST"
        ENCTYPE="application/x-www-form-urlencoded">

wird der Inhalt des Formulars zur angegebenen E-mail Adresse versandt.

"EMBPERL_MAILHOST" gibt den SMTP Server an den MailFormTo benutzt. Default ist localhost.

Beispiel:

 <HTML>
 <HEAD>
 <TITLE>Feedback</TITLE>
 </HEAD>
 <BODY>
        [- MailFormTo('webmaster@domain.xy',
                      'Mail von WWW Formular', 'email') -]
        Ihre Daten wurden erfolgreich versandt!
 </BODY>
 </HTML>

Das Beispiel sendet eine Mail mit allen Feldinhalten des Formulars (das Formular muß als Action die URL des obigen Beispiels angeben) zu der Mailadresse 'webmaster@domain.xy'. Als Betreff wird 'Mail von WWW Formular' verwendet und der Return-Path wird auf die Adresse gesetzt, welche im Feld 'email' eingegeben wurde.

HINWEIS: Sie müssen Net::SMTP (aus dem libnet Package) installiert haben, wenn Sie diese Funktion nutzen wollen.

exit

exit überschreibt die standard Perl exit Funktion. exit beendet die Ausführung des Dokuments und sendet alle bis dahin ausgeführten Ausgaben zum Browser.

Hinweis 1: exit beendet nur die aktuelle Datei. Wurde die Datei von einer anderen mittels Execute aufgerufen, wird die aufrufende Datei fortgesetzt.

Hinweis 2: Wird exit mit einem Argument aufgerufen, beendet es den gesamten Request, nicht nur die Ausführung der aktuellen Datei.

Hinweis 3: Innerhalb eines Perlmoduls, das von einer Embperl Seite aus aufgerufenen wird, sollten sie Apache::exit verwenden, da das normale Perl exit ansonsten den kompletten Childprozeß beendet. Apache::exit führt dazu, dass die Ausführung des Moduls, wie auch der Embperl Seite, abgebrochen wird, jedoch alle Ausgaben noch zum Browser gelangen.

Performance

Um die beste Performance von Embperl zu erzielen, ist es notwendig, das Logging auf ein Minimum zu beschränken. Sie können Embperl drastisch verlangsamen, wenn Sie alle Logging Option einschalten. Vorallem sollten Sie niemals dbgFlushOutput oder dbgFlushLog auf einen Produktionsserver einschalten. Während der geringfügige Performanceverlust beim Debuggen nicht auffällt, kann er auf einem stark belasteten Server durchaus ins Gewicht fallen. Auch die Optionen optDisableChdir, optDisableHtmlScan, optDisableCleanup haben Auswirkungen auf die Performance.

Lesen Sie ebenfalls mod_perl_tuning.pod für weitere Ideenen zur Performancesteigerung.

Bugs

Fehler sind keine bekannt.

Es wird jedoch empfohlen mindestens Perl 5.004_04 und mod_perl 1.08 einzusetzen, da ältere Versionen Speicherlecks aufweisen.

Kompabilität

Embperl wurde erfolgreich getestet

unter Linux 2.x mit

perl5.004_04
perl5.005_03
perl 5.6.0
perl 5.6.1
perl 5.8.5
apache_1.3.0 - apache_1.3.31, apache 2.0.50
apache_ssl (Ben SSL)
Stronghold 2.2
Stronghold 2.4.1
Apache_1.3.x with mod_ssl 2.x.x

Rückmeldungen bestätigen, dass es ebenfalls auf fast allen anderen Unix Varianten problemlos läuft.

unter Windows NT 4.0 mit

perl5.004_04
perl5.005
perl5.6.1
perl5.8.x
apache_1.3.0 - apache_1.3.31

unter Windows 95/98 mit

perl5.004_02 (Binary Distribution, nur Offline Mode)
perl5.005_02 + apache_1.3.6

Support

Rückmeldungen/Anregungen/Probleme/Fehlerreports

Diskussionen zu allen Fragen/Problemen rund um Embperl werden auf der Embperl Mailingliste (embperl@perl.apache.org) geführt. Sollten Sie Probleme mit Embperl haben, die sich nach der Lektüre dieser Dokumentation sowie der FAQs nicht lösen lassen, ist die Mailingliste der richtige Ort um nachzufragen. Oft wurden Probleme schon diskutiert, deshalb lohnt sich ein Blick in die Archive der Liste.

http://www.ecos.de/~mailarc/embperl/

oder in das Archiv der mod_perl Mailingliste für Fragen in Zusammenhang mit mod_perl

http://forum.swarthmore.edu/epigone/modperl

Um die Mailingliste zu abbonieren, senden Sie eine Mail an embperl-subscribe@perl.apache.org, zum von der Liste gestrichen zu werden genügt eine Mail an embperl-unsubscribe@perl.apache.org .

Haben Sie eine Website die Embperl benutzt, würde ich mich über eine Rückmeldung freuen und diese ggf. in die Liste der Sites die Embperl nutzen aufnehmen.

Kommerzieller Support

ecos bietet die Möglichkeit, Support für Embperl zu kaufen. Dies umfasst:

  • Beratung und Unterstützung Ihrer Programmierer

  • Konzeptionierung und Plannung von dynamischen Websites

  • Erstellung von teilweisen oder kompletten Webangeboten

  • Beseitigung von Fehler in Embperl (auch für mod_perl und Apache)

  • Implementierung neuer Features

Sie erreichen uns via http://www.ecos.de oder info@ecos.de Für weiter Informationen zu unserem Supportangebot, siehe

http://www.ecos.de/x/index.htm/support/r_support.htm

Wie kann ich die Entwicklung von Embperl unterstützen

Wenn Sie Embperl einsetzen und dessen weitere Entwicklung unterstützen möchten, gibt es zwei Möglichkeiten:

  1. Sie implementieren ihr Wunschfeature selbst und senden uns einen Patch.

  2. Sie kaufen kommerziellen Support (siehe oben). Auch wenn sie vielleicht die selben Antworten auf ihre Fragen auf der Mailingliste bekommen würden, macht es Sinn Support zu kaufen. Zum einen können sie sich dann sicher sein, immer eine Antwort auf ihre Fragen zu bekommen, zum anderen unterstützen sie damit die weitere Entwicklung von Embperl und ermöglichen uns mehr Zeit und Resourcen dafür aufzubringen.

Links und Download

Informationen

mod_perl http://perl.apache.org/

mod_perl FAQ http://perl.apache.org/faq

Embperl http://perl.apache.org/embperl/

Embperl (deutsch) http://www.ecos.de/embperl/

DBIx::Recordset ftp://ftp.dev.ecos.de/pub/perl/dbi

Apache Webserver http://www.apache.org/

ben-ssl (freier httpsd) http://www.apache-ssl.org/

mod_ssl (freier httpsd) http://www.modssl.org/

stronghold (kommerizieller httpsd) http://www.c2.net/ Europa http://www.eu.c2.net/ weitere Apache module http://perl.apache.org/src/apache-modlist.html

Download

mod_perl http://www.perl.com/CPAN/modules/by-module/Apache

Embperl ftp://ftp.dev.ecos.de/pub/perl/embperl

DBIx::Recordset ftp://ftp.dev.ecos.de/pub/perl/dbi

Debian packages http://www.cse.unsw.edu.au/~gusl/embperl

PPM für ActiveState http://theoryx5.uwinnipeg.ca/ppmpackages/

Information wie Embperl installiert wird finden sich in INSTALL.pod.

CVS

Die aktuelle Entwicklerversion ist via CVS verfügbar. Weitere Informationen dazu stehen in "perldoc CVS.pod".

Syntaxmodes für verschiedene Editoren

Emacs

Von: Erik Arneson [erik@mind.net]

Man braucht mmm.el von http://mmm-mode.sourceforge.net/

Anschließend muß man mein mmm-embperl.el downloaden von http://www.aarg.net/erik/mmm-embperl.el

Dokumentation ist in den Dateien enthalten.

VIM

Vim Syntaxfile für Vim 5.x & 6.x von Lukas Zapletal mit syntax highliting für JavaScript, VBScript, Perl+Embperl, CSS und HTML, gelbem Hintergrund für Perl code (wie M$ Interdev) und funktionierendem Perl folding: http://vim.sourceforge.net/script.php?script_id=61

Vim Syntaxfile von Steve Willer: http://www.interlog.com/~willer/embperl.vim

Vim Syntaxfile von Kee Hinckley: http://www.somewhere.com/software/

Dreamweaver

Dreamweaverextention welche Dreamweaver veranlasst den Embperl code in Ruhe zu lassen befindet sich unter http://www.somewhere.com/software/

Author

G. Richter (richter@dev.ecos.de)

1 POD Error

The following errors were encountered while parsing the POD:

Around line 13:

Non-ASCII character seen before =encoding in 'Für'. Assuming CP1252