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 ; } !]
|