Thread Unklare Fehlermeldung: Variable "$p1" will not stay shared
(46 answers)
Opened by wastl at 2011-02-04 12:30
mod_perl ist wie z.B. FastCGI einfach nur dazu da, um dafür zu sorgen, dass der Perl-Interpreter nicht jedesmal neu gestartet werden muss und das Skript auch nicht jedesmal neu eingelesen werden muss. (mod_perl kann im Gegensatz zu FastCGI noch etwas mehr, was aber hier nichts zur Sache tut).
Heisst, so eine Lösung bringt unheimlich viel Performance im Gegensatz zu herkömmlichen CGI. Man muss nur bei solchen Lösungen normalerweise sein Skript etwas umschreiben, das gibts nicht zum Nulltarif. Bei FastCGI packt man seinen Code in eine Schleife und der Rest bleibt wie gehabt. Bei mod_perl packt man seinen Code üblicherweise in einen Handler, das ist dann ein Modul. Bei beiden Varianten kommt es einem sehr zu gute, wenn das ursprüngliche Skript nicht zu lang ist und möglichst viel schon in Module ausgelagert ist. Das ist auch unabhängig von mod_perl oder FastCGI zu empfehlen! So, und ModPerl::Registry ist eine wahnsinnig bequeme Erfindung von den mod_perl-Machern, die es erlaubt, ein vorhandenes Skript sozusagen automatisch in einen mod_perl-Handler umzuwandeln. Dazu schreibt mod_perl um den kompletten Code des Skripts on-the-fly eine subroutine namens "handler". Das hat aber eben genau zur Folge, dass schon vorhandene Subroutinen nun verschachtelt sind und es zu dem beschriebenen Fehler kommen kann. Deshalb vermeide ich ModPerl::Registry. Ein echter Handler ist soviel besser. edit 2011-02-05: anscheinend wurde dieser beitrag von allen überlesen. deswegen hier nochmal als neu markiert. falls irgendwas unklar ist, einfach nachfragen anstatt irgendwo anders im thread irgendwelche vermutungen anzustellen. Last edited: 2011-02-05 12:45:02 +0100 (CET) Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |