Schrift
[thread]3103[/thread]

Apache aufmöbeln: mehr power aus apache rausholen (Seite 3)



<< |< 1 2 3 4 >| >> 34 Einträge, 4 Seiten
ptk
 2004-03-15 22:26
#30614 #30614
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nicht, wenn du diese Variablen auch in anderen Modulen/Skripten verwendest.
Froschpopo
 2004-03-15 22:36
#30615 #30615
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab mal eine ganz allgemeine frage:

eine Variable, die innerhalb einer Schleife deklariert ist, gilt die auch als Global? Sie ist ja immerhin ausserhalb einer Sub
renee
 2004-03-16 00:01
#30616 #30616
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
diese Variable ist nur in der Schleife gültig...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2004-03-16 00:55
#30617 #30617
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ok danke!!! gibt es sonst noch allgemeine dinge die man bei der arbeit mit mod_perl beachten sollte?
Strat
 2004-03-16 12:58
#30618 #30618
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei Apache::Registry fallen mir die folgenden Sachen ein:

1. Die perldoc's lesen: mod_perl, Apache::Registry, eventuell Apache::DBI, cgi_to_mod_perl, Mod_perl_cgi, Mod_perl_faq, mod_perl_traps,
2. globale Variablen nur readonly verwenden; wenn in die auch geschrieben werden soll, dann versuchen, ob man die nicht durch closures ersetzen kann
3. Nicht davon ausgehen, dass das Hauptprogramm im package main laeuft
4. Zirkulaere Referenzen selbst wieder soweit aufloesen, dass perl den speicher wiederverwenden kann
5. use strict und warnings sollte sowieso klar sein
6. ein Modul zum parameterparsen verwenden (z.b. CGI.pm), und vielleicht ein Templating-System fuer die Ausgabe des HTML-Codes verwenden (z.B. HTML::Template; das cached unter mod_perl auch recht gut, wenn man es ihm sagt)

Dann mal testen und nachschauen, ob Speicherleaks auftreten.

Feststellen, ob ein Script unter mod_perl laeuft, kannst Du am einfachsten, indem du die Existenz und den Wert der Umgebungsvariable $ENV{MOD_PERL} abfragst.

Wenn du mehr unter mod_perl machen willst, solltest du dir aber ein Buch darueber zulegen. Mir hat das "mod_perl Developer's Cookbook" von Geoffrey Young, Paul Lindner, Randy Kobes (Verlag: Sams Publishing, 2002, 0-672-32240-4, ~40Euro) sehr geholfen. Allerdings bezieht sich das auf den Apache 1.3.x, denn mod_perl fuer Apache2.0 scheint immer noch ziemlich beta zu sein...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Froschpopo
 2004-03-16 13:26
#30619 #30619
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Vielen Dank!
Kannst Du mir aber Punkt 3 und 4 nochmal erklären? Was ist eine zirkuläre Referenz und wie löst man sie auf.

$ENV{MOD_PERL} enthält den Wert: mod_perl/1.26
Globale Variablen hab ich jetzt alle als readonly.
Strat
 2004-03-16 20:38
#30620 #30620
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
3. bei mod_perl wird haeufig das Hauptprogramm in ein eigenes package gesetzt, damit der Code dieses programmes nicht mit dem von anderen kollidiert. welches das bei dir ist, kannst du z.B. mit dem backtracing-code auf meiner HP -> Tips&Tricks herausfinden
4.
Code: (dl )
1
2
3
my $x;
my $y = \$x; # $y verweist auf $x; soweit noch ok
$x = \$y; # $x verweist auf $y, somit verweisen die beiden auf sich gegenseitig bzw. zirkulaer)

da perl anhand eines referenzzaehlers ueberprueft, ob noch was auf den speicherbereich einer referenz zeigt, kann es so nicht selbst feststellen, dass es den speicher wieder freigeben kann, und er bleibt solange alloziiert, bis das programm abbricht (also z.b. der prozess resetted wird). mir ist sowas bisher eigentlich nur bei der programmierung von graphen passiert. Aufloesen kann man sowas, indem man eine referenz unterbricht, z.B. undef $y; oder $y = undef;\n\n

<!--EDIT|Strat|1079462344-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2004-03-16 21:05
#30621 #30621
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Strat,16.Mar..2004, 19:38]4.
Code: (dl )
1
2
3
my $x;
my $y = \$x; # $y verweist auf $x; soweit noch ok
$x = \$y; # $x verweist auf $y, somit verweisen die beiden auf sich gegenseitig bzw. zirkulaer)

da perl anhand eines referenzzaehlers ueberprueft, ob noch was auf den speicherbereich einer referenz zeigt, kann es so nicht selbst feststellen, dass es den speicher wieder freigeben kann, und er bleibt solange alloziiert, bis das programm abbricht (also z.b. der prozess resetted wird). mir ist sowas bisher eigentlich nur bei der programmierung von graphen passiert. Aufloesen kann man sowas, indem man eine referenz unterbricht, z.B. undef $y; oder $y = undef;[/quote]
... oder indem man eine Referenz "schwach" macht (siehe Scalar::Util::weaken).
Froschpopo
 2004-03-16 23:51
#30622 #30622
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
was ist hiermit:
Code: (dl )
our %hash = ('ref' => \&zeiger);

muss ich das auch auflösen (ist global)
Froschpopo
 2004-07-22 18:04
#30623 #30623
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
wie kann ich globvars ändern?\n\n

<!--EDIT|Froschpopo|1090505097-->
<< |< 1 2 3 4 >| >> 34 Einträge, 4 Seiten



View all threads created 2004-03-15 16:13.