Struppi: + Perl // Bekomme ein Fehler im Browser angezeigt!!!1

Beitrag lesen

Hallo shadow

Ok hab mal die ganze Seite kopiert:

und das läuft ohne Fehlermeldung in der Konsole?
Das glaube ich nicht. Bei mir gibt's folgende Meldungen (ich hab CGI::Carp auskommentiert)

Scalar value @werte[0] better written as $werte[0] at test.pl line 13.
Global symbol "$ausgabe" requires explicit package name at test.pl line 8.
Global symbol "@werte" requires explicit package name at test.pl line 10.
Global symbol "$ausgabe" requires explicit package name at test.pl line 10.
Global symbol "$werte" requires explicit package name at test.pl line 11.
Global symbol "@werte" requires explicit package name at test.pl line 11.
Global symbol "$varmenu" requires explicit package name at test.pl line 13.
Global symbol "$varpool" requires explicit package name at test.pl line 13.
Global symbol "@werte" requires explicit package name at test.pl line 13.
BEGIN not safe after errors--compilation aborted at test.pl line 19.

du musst die variabeln mit my deklarieren, wenn du use strict verwendest.

#!/usr/bin/perl

die Warnungen solltest du dir auch anzeigen lassen:
#!/usr/bin/perl -w

#Fehlerausgabe an den Browser
use CGI::Carp qw(fatalsToBrowser);
use strict;

$ausgabe=$ENV{'QUERY_STRING'};

my $ausgabe

Aber an deiner Stelle würd ich dir das CGI Modul empfehlen, das nicht nur das parsen des Input macht sondern noch eine ganze Menge mehr drauf hat.

@werte = split (/&/, $ausgabe);
foreach $werte (@werte)
{
   ($varmenu, $varpool) = split (/=/, @werte[0]);
}

Array spricht man so an $werte[index]
Es fehlt überall my

#Dateiflock
use Fcntl qw(:DEFAULT :flock);
use constant LOCK_EX => 2;

Ich meinte damit, das wenn du eine falsche Version von Fcntl hast der Import von :flock einen Fehler erzeugt, d.h. du kannst den Import nicht verwenden, wenn diese Zeile nicht den Fehler erzeugt, kannst du dir die Konstante sparen.

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

Der Wert nach dem gesucht werden soll

my $eingabe = $varpool;

my @zeile=();
my $gefunden=0;
open (DATEI, "<@dir1[0]") or die "Kann Datei @dir1[0] nicht öffnen$!\n";
flock(DATEI,2);

Hier sollltest du dann auch dioe Importierten Konstanten verwenden.

flock DATEI,LOCK_EX || die "Kann File nicht locken: $!";

while(<DATEI>) {
  chomp;
  @zeile=split(/\s*,\s*/,  $_, 1);

Wenn ich das richtig versteh, willst du am Komma trennen, aber nur ein Element.

if($eingabe eq $zeile[0]){
  $gefunden=1;
  last;
  }
}
close(DATEI);

if($gefunden){

Ausgabe der zeile

print "$zeile[0] - zeile[1] - zeile[2] - zeile[3] - zeile[4]";

Da das split oben nur ein Elemente erzeugt sollte die Elemente 1-4 leer sein http://perldoc.com/perl5.8.0/pod/func/split.html

Struppi.