quasi_modem: fehlermeldungen mit perl -w ein Rätsel...

Hi,

habe ein Perlscript (cgi-Anwendung), welches beim Aufruf über den Apache keine Fehlermeldungen ausgibt (fatals to browser ist aktiv, use strict auch).

Bei Überprüfung des Scripts durch perl -w habe ich einige Fehlermeldungen, die ich überhaupt nicht kapiere. Vielleicht kann mir jemand was dazu sagen....

Ermittele einen Inhalt aus einem Formular. Aus diesem will ich doppelte Leerzeichen filtern und durch ein single-Leerzeichen ersetzen. 1. Fehlermeldung taucht auf bei der Suche:
$text = s/ +/ /g;
Meldung: Use of uninitialized value in substitution.

gleiches im Folgenden, wenn ich die Wörter dann an den single-Leerzeichen spliten möchte:
my @woerter = split(/ /,$text);
Meldung: uninitialized value in split.

Dann lege ich ein neues Array an, aus Zahlen, die dynamisch ermittelt werden. Wieder sind es Zahlen aus einem Formular, die zuvor ausgelesen wurden.
my @zahlen = ($zahlNiedrig .. $zahlHoch);
Meldung: Use of unitialized value in range (or flop).

Nun erschließt sich mir überhaupt nicht, was ich hier falsch gemacht habe. Kann mir jemand helfen???

Vielen Dank,
quasi_modem

  1. Hi,

    Ermittele einen Inhalt aus einem Formular.

    und wie machst Du das?

    $text = s/ +/ /g;
    Meldung: Use of uninitialized value in substitution.

    $text war deklariert, aber nicht initialisiert: der Inhalt ist 'undef'. Abhilfe: Bei oder nach der Deklaration mit einem Wert initialiseren, z.B. mit ''.

    my @woerter = split(/ /,$text);
    Meldung: uninitialized value in split.

    Exakt die selbe Ursache.

    my @zahlen = ($zahlNiedrig .. $zahlHoch);
    Meldung: Use of unitialized value in range (or flop).

    Welche Werte stehen in $zahlNiedrig und $zahlHoch? Und welche Werte stehen _wirklich_ drin?

    Übrigens: perldoc perlstyle gibt einige Empfehlungen zu Groß- und Kleinschreibung in Variablennamen, die Du zumindest kennen solltest.

    Cheatah

    1. $text = s/ +/ /g;
      Meldung: Use of uninitialized value in substitution.

      $text war deklariert, aber nicht initialisiert: der Inhalt ist 'undef'. Abhilfe: Bei oder nach der Deklaration mit einem Wert initialiseren, z.B. mit ''.

      Sollte wohl dann eher $text =~ s/ +/ /g; heißen, oder?

      Ciao Micha

      1. Hi,

        $text = s/ +/ /g;
        Sollte wohl dann eher $text =~ s/ +/ /g; heißen, oder?

        autsch. Ja, es empfiehlt sich, genau hinzuschauen :-)

        Cheatah

        1. $text = s/ +/ /g;
          Sollte wohl dann eher $text =~ s/ +/ /g; heißen, oder?

          autschaaahh. Der Tipfehler ist nicht im Script, sondern nur hier....
          Im Script steht =~!!!

          1. Hi,

            autschaaahh. Der Tipfehler ist nicht im Script, sondern nur hier....
            Im Script steht =~!!!

            allgemein: Es macht _keinen_ Sinn, fehlerhaften Code anders als durch Copy&Paste zu veröffentlichen. Wie soll man herausfinden können, wo die Fehlerquelle nun ist, oder ob der wirkliche Fehler vielleicht beim erneuten Tippen mitkorrigiert wurde?

            Beim nächsten Mal also bitte :-)

            Cheatah

    2. $text war deklariert, aber nicht initialisiert: der Inhalt ist 'undef'. Abhilfe: Bei oder nach der Deklaration mit einem Wert initialiseren, z.B. mit ''.

      ... möglicherweise stehe ich ja auf einem riesigen Schlauch, aber:
      deklarieren heißt:
      $text;
      initialisieren:
      $text = "bla bla";

      ich ermittel die Formulardaten mit dem cgi-Modul. Ich bin davon ausgegangen, dass:
      my $text = $query->param('text');
      zum initialisieren ausreicht.

      Fehlannahme???

      quasi_modem

      1. Hi,

        deklarieren heißt:
        $text;
        initialisieren:
        $text = "bla bla";

        korrekt.

        my $text = $query->param('text');
        zum initialisieren ausreicht.
        Fehlannahme???

        Nun - was ist, wenn kein Parameter namens "text" vorliegt? ;-) Initialisieren bedeutet, einen Wert in die Variable zu schreiben. CGI::param() kann, wie die meisten Funktionen, auch _keinen_ Wert zurückgeben.

        my $text = $query->param('text') || '';

        Cheatah