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

Unterschiedliches Verhalten lokal/Internet: Im Internet wie erwartet, auf lokalem ko



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Barnabas
 2007-06-04 16:52
#29033 #29033
User since
2007-06-04
7 Artikel
BenutzerIn
[default_avatar]
Hallo,
Wenn ich folgendes Programm starte, wird wie erwartet 1 angezeigt. Dann wird es hochgezählt.
Wenn ich es im Internet neu starte (z.B. mit refresh) passiert genau das gleiche (Anzeige von 1).
Wenn ich auf meinem lokalen Apache-Server refresh drücke oder auch die URL neu eingebe, zeigt er 2 beim nächsten Mal 3 an usw.
Im Internet wird offensichtlich bei jedem Aufruf in Zeile 13 die Initialisierung auf 1 durchgeführt. Warum ist das lokal anders?
Gruß
Barnabas


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;
my ($zahl);
sub getinc
{print "*** \$zahl(1): $zahl ***<br>";
$zahl= $zahl+1;
print "*** \$zahl(2): $zahl ***<br>";
}
use CGI;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
$zahl = 1;
print <<AAA;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head></head><body>
AAA
getinc ();
print <<GGG;
</div>
</body>
</html>
GGG
MisterL
 2007-06-04 17:02
#29034 #29034
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Evtl. kann das Verhalten im Browser daran liegen, dass die Variable im Cachespeicher liegt und von dort ausgelesen wird.
Allerdings hat es bei der Ausführung des Skripts hier ein Problem gegeben (Windows mit XAMPP, Perl 5.8.8):
Quote
C:\Programme\xampp\cgi-bin>perl zaehlen.cgi
Content-type: text/html

<h1>Software error:</h1>
<pre>Can't find string terminator &quot;GGG&quot; anywhere before EOF at zaehlen
.cgi line 19.
</pre>
<p>
For help, please send mail to this site's webmaster, giving this error message
and the time and date of the error.

</p>
[Mon Jun 4 14:59:11 2007] zaehlen.cgi: Can't find string terminator "GGG" anywh
ere before EOF at zaehlen.cgi line 19.
“Perl is the only language that looks the same before and after RSA encryption.”
renee
 2007-06-04 17:09
#29035 #29035
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@MisterL: Ist ein Zeilenumbruch nach dem letzten GGG da?
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/
Barnabas
 2007-06-04 17:10
#29036 #29036
User since
2007-06-04
7 Artikel
BenutzerIn
[default_avatar]
Ich glaube hinter dem GGG muß ein Zeilenvorschub kommen, sicherheithalber auch hinter AAA.
MisterL
 2007-06-04 17:18
#29037 #29037
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Glauben heisst nicht wissen

@renee: Ja, nach dem Einfügen des Zeilenumbruchs geht es:
Quote
C:\Programme\xampp\cgi-bin>perl zaehlen.cgi
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/st
rict.dtd">
<html><head></head><body>
*** $zahl(1): 1 ***<br>*** $zahl(2): 2 ***<br></div>
</body>
</html>

Unter http://localhost/cgi-bin/zaehlen.cgi lacht einen dennoch ein Fehler 500 an...(jaaaa, ich soll die FAQ dazu studieren. Bin aber zu faul dazu)
“Perl is the only language that looks the same before and after RSA encryption.”
Barnabas
 2007-06-04 17:29
#29038 #29038
User since
2007-06-04
7 Artikel
BenutzerIn
[default_avatar]
Dann ist Dein System wiederum anders!
Ich habs gerade laufen lassen ohne Fehler.
Vielleicht hat ja noch jemand anders eine gute Idee.

Ich habe es allerdings nicht von der Kommandozeile gestartet sondern im Browser (Firefox und IE und Opera).\n\n

<!--EDIT|Barnabas|1180963880-->
Barnabas
 2007-06-04 22:37
#29039 #29039
User since
2007-06-04
7 Artikel
BenutzerIn
[default_avatar]
Hallo,
wenn ich in dem Skript die Variable $zahl nicht mit "my $zahl;" sondern mit "use vars ($zahl);" definiere, läuft es auch auf meinem Server.
Habt Ihr dafür eine Erklärung?
Gruß
Barnabas

Wer kann mir in diesem Zusammenhang die Wirkungsweise von my bzw. use vars erklären?\n\n

<!--EDIT|Barnabas|1181031064-->
pq
 2007-06-04 23:28
#29040 #29040
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das skript läuft vermutlich unter modperl registry.
denselben effekt kannst du auf der kommandozeile mit dem folgenden
code erzeugen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ perl -wle'
{
package foo;
sub handler {
my $zahl;
sub getinc {
  $zahl++;
  print "*** \$zahl(2): $zahl ***<br>";
}
getinc();
}
}
foo::handler();
foo::handler();
foo::handler();
'
Variable "$zahl" will not stay shared at -e line 7.
*** $zahl(2): 1 ***<br>
*** $zahl(2): 2 ***<br>
*** $zahl(2): 3 ***<br>

man sollte keine subroutinen verschachteln; durch Apache::Registry
wird aber dein skript in eine weitere sub handler() verschachtelt.
also solltest du subroutinen möglichst auslagern oder zumindest keine variablen
von aussen in der sub benutzen.
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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Barnabas
 2007-06-05 00:52
#29041 #29041
User since
2007-06-04
7 Artikel
BenutzerIn
[default_avatar]
[quote=pq,04.06.2007, 21:28]das skript läuft vermutlich unter modperl registry.[/quote]
Das sagt mir jetzt nichts.
Ich rufe das Skript im Internet-Browser auf.
In deinem Beispiel wird die Variable nicht initialisiert?
pq
 2007-06-05 14:05
#29042 #29042
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Barnabas,04.06.2007, 22:52][quote=pq,04.06.2007, 21:28]das skript läuft vermutlich unter modperl registry.[/quote]
Das sagt mir jetzt nichts.[/quote]
mod_perl: http://perl.apache.org/
Quote
Ich rufe das Skript im Internet-Browser auf.

im internet-browser, soso. schon klar.
Quote
In deinem Beispiel wird die Variable nicht initialisiert?

*hrm*
also bitte:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ perl -wle'
{
package foo;
sub handler {
my $zahl = 1;
sub getinc {
   $zahl++;
   print "*** \$zahl(2): $zahl ***<br>";
}
getinc();
}
}
foo::handler();
foo::handler();
foo::handler();
'
Variable "$zahl" will not stay shared at -e line 7.
*** $zahl(2): 2 ***<br>
*** $zahl(2): 3 ***<br>
*** $zahl(2): 4 ***<br>

jetzt zufrieden?
das ändert nichts an der tatsache, dass das skript vermutlich als
mod_perl aufgerufen wird; nur so kann ich das verhalten erklären.
alles, was ich gesagt habe, gilt auch so.
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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2007-06-04 16:52.