Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10705[/thread]

Perl_cgi oder mod_perl (page 2)

Readers: 2


<< |< 1 2 3 >| >> 25 entries, 3 pages
GwenDragon
 2007-11-02 18:05
#101699 #101699
User since
2005-01-17
14790 articles
Admin1
[Homepage]
user image
Gast+2007-11-02 16:47:13--
So einfach scheint es doch nicht zu sein.

Ich weiß ja nicht wie deine Apache-Konfig aufgebaut ist.

Schlaue Leute packen eben was in eine Abfrage mit Ifmodule ;)
Code: (dl )
1
2
3
4
5
6
<Ifmodule mod_perl.c>
# The following is for mod_perl
include conf/mod_perl.conf
# The following is for HTML::Mason with mod_perl
include conf/mason-mod_perl.conf
</Ifmodule>


Wenn das Modul nicht geladen wird, gelten auch andere Optionen nicht.
guest Gast
 2007-11-02 18:34
#101700 #101700
Ich habe die Original Konfiguration von Apache verwendet.
Ich werde mal versuchen, sie entsprechend anzupassen.

Falls von Interesse.
Ich habe das Beispiel von Selfhtml auf meinen Fall abgeändert und es ist tatsächlich der gleiche Effekt.
Wenn ich das nachfolgende Programm aufrufe mit test.pl?zahl=1
und dann nochmal mit test.pl?zahl=2,
so wird 2 richtig eingelesen, in dem Unterprogramm wird aber nach wie vor 1 ausgegeben.
Wenn ich $zahl global definiere, läuft das Programm auch im lokalen System korrekt, das kann aber doch nicht die Lösung sein, denn dies widerspräche allen Empfehlungen, globale Variablen zu vermeiden.

test.pl:

#!/usr/bin/perl -w
use strict;

my ($zahl);
sub getinc
{print "*** \$zahl in getinc: $zahl ***<br>"; # alter Wert: Fehler
}
use CGI;
use CGI::Carp qw(fatalsToBrowser);

print <<AAA;
Content-type: text/html\n\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head></head><body>
AAA

my $query = new CGI;
$zahl = $query->param('zahl');
print "*** \$zahl zum Programmbeginn: $zahl ***<br>"; # neuester übergebener Wert: In Ordnung

getinc ();

print <<GGG;
</div>
</body>
</html>
GGG
guest Gast
 2007-11-02 21:17
#101705 #101705
Ich habe jetzt folgendes gefunden:

Zitat:
13.2.1 Der mod_perl-Handler ModPerl::Registry
Der wichtigste mod_perl-Hander ist ModPerl::Registry. Dieser Handler hat im Wesentlichen zwei Aufgaben:
• er erstellt eine CGI-Umgebung, so dass normale CGI-Skripte ausgeführt werden können
• er hält kompilierte Skripte in einem Cache, um wiederholte Kompilierung des gleichen Skripts zu vermeiden
Bei jedem Aufruf untersucht ModPerl::Registry den Cache, um festzustellen, ob ein Skript in der Zwischenzeit modifiziert wurde und neu kompiliert werden muss. Das bedeutet, dass in Fällen, in denen das gleiche Skript mehrfach ausgeführt wird, eine beachtliche Performance-Steigerung gegenüber dem normalen CGI-Aufruf erreicht wird.

mod_perl bietet noch einen einfacheren Handler zur Ausführung von CGI-Skripten an, nämlich ModPerl::PerlRun, der kein Caching vornimmt und damit der normalen CGI-Ausführung am nächsten kommt.

Ende des Zitats


Mit ModPerl::PerlRun ist der Fehler verschwunden.
Allerdings habe ich jetzt einen Fehler an anderer (späterer) Stelle in der
l o k a l e n Version.
Struppi
 2007-11-02 21:27
#101706 #101706
User since
2006-02-17
628 articles
BenutzerIn
[Homepage]
user image
Warum verwendest du überhaupt eine globale Variabel und übergibst den Wert nicht als Parameter?
guest Gast
 2007-11-02 21:34
#101708 #101708
Wie kommst Du auf die globale Variable?
Struppi
 2007-11-02 21:41
#101710 #101710
User since
2006-02-17
628 articles
BenutzerIn
[Homepage]
user image
Naja, du verwendest my ausserhalb eines Blocks, dann ist sie in der Datei global und in der Funktion verwendest du sie ja auch als globale Vairabel, sonst würdest du sie ja als Parameter übergeben.
guest Gast
 2007-11-02 22:22
#101712 #101712
Ich dachte mit use vars würden globale Variablen definiert und nicht mit my.
In dem aktuellen thread wurde ja auch als Lösung empfohlen, die Variable als global zu definieren. Mit der Definition mit "use vars" hat das Programm im Gegensatz zur Def. mit "my" ja auch in der lokalen Version funktioniert.
Was ist dann der Unterschied zwischen den beiden "globalen" Variablen?
guest Gast
 2007-11-02 22:29
#101714 #101714
.... und zwar den Fehler "Not a code reference at ...." wie im thread

http://board.perl-community.de/thread/3242/startWi...


wo auch noch die Ursache ungeklärt scheint.
guest Gast
 2007-11-02 22:31
#101716 #101716
Sorry, bin hier noch ungeübt: Beitrag 18 bezog sich auf Beitrag 13
Struppi
 2007-11-03 13:50
#101739 #101739
User since
2006-02-17
628 articles
BenutzerIn
[Homepage]
user image
Gast+2007-11-02 21:22:31--
Ich dachte mit use vars würden globale Variablen definiert und nicht mit my.
In dem aktuellen thread wurde ja auch als Lösung empfohlen, die Variable als global zu definieren. Mit der Definition mit "use vars" hat das Programm im Gegensatz zur Def. mit "my" ja auch in der lokalen Version funktioniert.
Was ist dann der Unterschied zwischen den beiden "globalen" Variablen?
Nein, der Unterschied ist, das du mit my eine lexikalische Variabel defenierst mit use vars eine Packagevariabel. Du hast den Link wo das erklärt wird ja schon im selfforum bekommen, aber trotzdem hier nochmal http://aktuell.de.selfhtml.org/artikel/cgiperl/sco...

Und wie gesagt, wenn du mit my eine Variabel ausserhalb eines Blocks deklarierst ist diese in der Datei global und nach wie vor stellt sich mir hier die Frage, warum du nicht einfach einen Parameter verwendest.
<< |< 1 2 3 >| >> 25 entries, 3 pages



View all threads created 2007-11-01 23:03.