30.8.5.2. mod_perl vs. CGI Im einfachsten Fall kann man ein bisheriges CGI-Skript als mod_perl-Skript laufen lassen, indem man es unter einer anderen URL aufruft. Die Konfigurationsdatei enthält Aliase, die auf das gleiche Verzeichnis verweisen und darin enthaltene Skripten entweder über CGI oder über mod_perl aufrufen. Alle diese Einträge sind in der Konfigurationsdatei bereits eingetragen. Der Alias-Eintrag für CGI lautet: ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"     Die Einträge für mod_perl lauten wie folgt: # Provide two aliases to the same cgi-bin directory, # to see the effects of the 2 different mod_perl modes. # for Apache::Registry Mode ScriptAlias /perl/          "/srv/www/cgi-bin/" # for Apache::Perlrun Mode ScriptAlias /cgi-perl/      "/srv/www/cgi-bin/"     Die folgenden Einträge sind für mod_perl ebenfalls nötig. Auch sie sind bereits in der Konfigurationsdatei eingetragen. # # If mod_perl is activated, load configuration information # Perlrequire /usr/include/apache/modules/perl/startup.perl PerlModule Apache::Registry # # set Apache::Registry Mode for /perl Alias # SetHandler  perl-script PerlHandler Apache::Registry Options ExecCGI PerlSendHeader On # # set Apache::PerlRun Mode for /cgi-perl Alias # SetHandler  perl-script PerlHandler Apache::PerlRun Options ExecCGI PerlSendHeader On     Diese Einträge legen Aliase für die Modi Apache::Registry und Apache::PerlRun an. Der Unterschied zwischen beiden Modi ist folgender: Apache::Registry Alle Skripten werden kompiliert und dann in einem Cache gehalten. Jedes Skript wird als Inhalt einer Subroutine angelegt. Dies ist gut für die Performance, hat jedoch auch einen Nachteil: Die Skripten müssen sehr sauber programmiert sein, da Variablen und Subroutinen zwischen den Aufrufen erhalten bleiben. Das bedeutet, dass man Variablen selbst zurücksetzen muss, damit sie beim nächsten Aufruf erneut verwendet werden können. Speichert man beispielsweise in einem Skript für Online-Banking die Kreditkartennummer eines Kunden in einer Variablen, so könnte diese Nummer wieder auftauchen, wenn der nächste Kunde die Anwendung benutzt und somit das gleiche Skript wieder aufruft. Apache::PerlRun Die Skripten werden für jede Anfrage neu kompiliert, sodass Variablen und Subroutinen zwischen den Aufrufen aus dem Namespace verschwinden. Der Namespace ist die Gesamtheit aller Variablennamen und Routinennamen, die zu einem bestimmten Zeitpunkt während der Existenz eines Skripts definiert sind. Mit Apache::PerlRun muss man deswegen nicht so genau auf saubere Programmierung achten, da alle Variablen beim Start des Skripts neu initialisiert sind und keine Werte aus vorangegangenen Aufrufen mehr enthalten können. Dies geht zu Lasten der Geschwindigkeit, ist aber immer noch deutlich schneller als CGI (trotz einiger Ähnlichkeiten zwischen Apache::PerlRun und CGI), da man sich den Aufruf eines eigenen Prozesses für den Interpreter spart.