Schrift
[thread]10839[/thread]

Nicht lineare Ausführung von Code (Seite 2)



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Struppi
 2007-11-21 14:23
#102711 #102711
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Natürlich sind die Variabeln global.
pq
 2007-11-21 14:34
#102717 #102717
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
luci+2007-11-21 13:12:02--
bei Apache allerdings wurde der Wert in die Datei geschrieben NOCH BEVOR(!) der
Befehl dazu gegeben wurde.

also, es gibt sicher Bugs in Apache, und sicher auch in mod_perl, aber in die Zukunft schauen
kann weder perl noch Apache noch mod_perl. (trotz Damian Conways beeindruckenden versuchen).
Ich bin ziemlich sicher, dass du mehrere Requests machst und den Überblick verlierst, was nun
gerade in der Datei drinstehen müsste.
Es wird nicht besser, indem du Apache immer wieder unterstellst, er würde was tun, was in
der Zukunft liegt, oder er würde ein if-else parallel ausführen.
Deine Aufgabe ist es jetzt, zu debuggen, das heisst, an möglichst vielen Stellen im Script
ein paar Ausgaben auf STDERR hinzuzufügen, z.b. den Dateiinhalt, den Inhalt der Variable,
und möglichst alles mit Prozessid.
Wenn dann zwei solcher Ausgaben in der Reihenfolge vertauscht sind, dann kannst du gerne
wiederkommen und behaupten, Apache könne in die Zukunft sehen.
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
pq
 2007-11-21 14:35
#102718 #102718
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Struppi+2007-11-21 13:23:48--
Natürlich sind die Variabeln global.

nun ja, definitionssache. es sind mit my() deklarierte variablen, die aber in dem skript global sind. es sind jedoch keine globalen variablen an sich (solche, die in der symboltabelle stehen).
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
Siechfred
 2007-11-21 14:43
#102721 #102721
User since
2007-11-12
30 Artikel
BenutzerIn
[default_avatar]
Definitionssache ;)

In der Symboltabelle stehen nur Packagevariablen, keine lexikalischen (die stehen IIRC in Scratchpads). Insofern ist global im Zusammenhang mit my eher irritierend, denn das sind sie strenggenommen nicht. Ich verwende mittlerweile lieber die Begriffe öffentlich (für Packagevariablen) und privat (für lexikalische Variablen). Das führt m.E. zu weniger Verwirrung, ist aber natürlich Geschmackssache :)

Siechfred
luci
 2007-11-21 15:28
#102735 #102735
User since
2007-11-20
6 Artikel
BenutzerIn
[default_avatar]
Ein letzter Anlauf, das verrückte ist, wird der Schreibvorgang ausgeklammert also

Code: (dl )
# print $FILE "$q\n"; 

ist $doubleVote = -1 (korrekt)

mit
Code: (dl )
print $FILE "$q\n"; 

ist $doubleVote = 1 (falsch)


Mein System kann wirklich in die Zukunft sehen oder Apache speichert erst die Dateien ab bevor es den Code ausführt (wie auch immer)


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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper; # nur für die Testausgabe
use CGI::Carp qw(fatalsToBrowser); # damit Fehler im Browser angezeigt werden

print ("Content-type: text/html\n\n");

sub f1 {

my $q = "hallo";
my $doubleVote = -1;

open my $FILE,'<', "log.txt" or die "Cannot open log.txt: $!"; # Datei anfangs immer leer !
my @lines = <$FILE>;
close ($FILE);

print '<pre>', Dumper(\@lines),'</pre>';

foreach my $pair (@lines) {
if ($pair eq "$q\n") {
$doubleVote = 1;
}
}

if ($doubleVote == -1) {
open $FILE, ">>", "log.txt" or die "log.txt: " . $!;
print $FILE "$q\n";
close ($FILE) or die "Can't close log.txt: $!";
}

print $doubleVote;

}

&f1;
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-11-20 19:16.