Andreas: Floodprotection

Nabend,

wieso erzeugt folgender Code(Perl) den Fehler(bei Verwendung des Modules strict):

Software error:

Global symbol "$fldtime" requires explicit package name at D:\Server\Apache2\cgi-bin\gaestebuch.pl line 234.
Global symbol "$fldip" requires explicit package name at D:\Server\Apache2\cgi-bin\gaestebuch.pl line 241.
Execution of D:\Server\Apache2\cgi-bin\gaestebuch.pl aborted due to compilation errors.

Ohne strict werden die Anweisungen zwar ausgeführt, aber eben my $fldtime ist != dem $fldtime aus dem ich die neue Zeit ausrechne.

Achja: Bei einem anderen Script klappte es nicht eine Datei zum Lesen und Schreiben zu öffnen, also open(DATA, "+< datei"). Muss man dabei irgendwas beachten?

my $ip = $ENV{'REMOTE_ADDR'};
    my $time = time();

open(DATA,">>$floodprot");
      print DATA "$time|$ip\n";
    close(DATA);

open(DATA,"$floodprot");
      my @ips = <DATA>;
    close(DATA);

open(DATA,">$floodprot");
    foreach (@ips) {
      my $i = 0;

if ($i == 0) {
        (my $fldtime, my $fldip) = split(/|/, $_);
        chomp($fldip);
        $i = 1;
      }

my $timeover = $fldtime + $count;   # Zeile 234

if ($time > $timeover) {
        $i = 0;
        next;
      }

if ($fldip eq $ip) {                # Zeile 241
        print $query->start_html(-title=>'Error',                                 -style=>{'src'=>'../stylesheets/style.css'});
        print $query->p("Fehler: Floodprotection (".$count."sec) [<a href="javascript:history.back();">zurück</a>]<noscript>[<a href="$ENV{'HTTP_REFERER'}">zurück</a>]</noscript>\n");
        print $query->end_html;
        exit;
      }
    }
    close(DATA);

gruss, Andreas

  1. Morgen ;-)

    wieso erzeugt folgender Code(Perl) den Fehler(bei Verwendung des Modules strict):

    Versuch mal die Variable vorher zu definieren. Wenn du mit my eine Variable definierst, dann ist diese für "darüberliegende" Schichten nicht verfügbar, nur für "darunterliegende".

    Grüße Andres Freund

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
    1. Morgen ;-)

      wieso erzeugt folgender Code(Perl) den Fehler(bei Verwendung des Modules strict):
      Versuch mal die Variable vorher zu definieren. Wenn du mit my eine Variable definierst, dann ist diese für "darüberliegende" Schichten nicht verfügbar, nur für "darunterliegende".

      Darauf bin ich auch gerade gekommen. Leider funktioniert der Programmteil ansich noch nicht so ganz wie ich mir das vorgestellt habe, aber das wird man auch noch hinkriegen.

      gruss, Andreas