Poldi: Fehler bei 'PRINT <<XXX;'

Schönen Abend,
In meinem Perl-Script wird der folgende Befehl moniert

print <<XXX;

und zwar mit der Meldung:

[Fri Jun 16 21:31:45 2006] [error] [client 127.0.0.1] [Fri Jun 16 21:31:45 2006] kontakt.pl: Use of uninitialized value in concatenation (.) or string at C:/apachefriends/xampp/htdocs/cgi-bin/kontakt.pl line 388., referer: http://localhost/tests/testform.htm

(Die Zeile 388 weist eindeutig auf dieses Statement)

Was könnte das bedeuten ?

  1. hallo,

    In meinem Perl-Script wird der folgende Befehl moniert
    print <<XXX;

    Schreibe die Zeile so:
      print << "XXX";

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo,

      Schreibe die Zeile so:
        print << "XXX";

      Ich glaube nicht, dass es damit etwas zu tun hat.
      Ich persönlich bevorzuge ohnehin print q~ ...~; für simplen Text und print qq~.....~; für Text in dem Variablen geparst werden sollen, aber das tut jetzt nichts zur Sache.

      [Fri Jun 16 21:31:45 2006] [error] [client 127.0.0.1] [Fri Jun 16 21:31:45 2006] kontakt.pl: Use of uninitialized value in concatenation (.) or string at C:/apachefriends/xampp/htdocs/cgi-bin/kontakt.pl line 388., referer: http://localhost/tests/testform.htm

      In diesen Fällem hilft die Zeilennummer nicht wirklich etwas. Derartige Fehler sind nur sehr schwer zu finden. Es könnte sein, dass der Fehler viel weiter "oben" entsteht. Eine Möglichkeit wäre, nach jedem Aufruf des CGI-Scripts nachzusehen, ob der Fehler gerade entstanden ist oder nicht, um den Bereich eingrenzen zu können.
      Oft werden bei dieser Art von Fehler zu wenige Variablen an eine Funktion übergeben, obwohl die Funktion mehrere als übergeben erwartet.

      Markus.

      --
      http://www.apostrophitis.at
      Maschiene währe Standart Gallerie vorraus Packete Objeckte tollerant vieleicht Strucktur
      1. Hallo,
        Danke für die Tips.
        Es war tatsächlich ein Feld undefiniert.
        Allerdings war es sehr mühsam bei 500 Zeilen vor dem 'PRINT <<XXX' die richtige Stelle zu finden.
        Schade, dass es da keine genaueren Fehlerhinweise gibt.

        1. Hi,

          kommt auf Editor, bzw. IDE an. In Eclipse z.B. gibt es genaue Fehlerhinweise zu solchen Fehlern schon während der Eingabe des Quellcodes. Damit wird das Coding wesentlich produktiver.

          MfG
          Danny

          1. kommt auf Editor, bzw. IDE an. In Eclipse z.B. gibt es genaue Fehlerhinweise zu solchen Fehlern schon während der Eingabe des Quellcodes. Damit wird das Coding wesentlich produktiver.

            Woher weiß denn Eclipse das eine Variabel zur Laufzeit undefiniert sein wird?
            Kann es hellsehen?

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Woher weiß denn Eclipse das eine Variabel zur Laufzeit undefiniert sein wird?
              Kann es hellsehen?

              Eine lauffähige Perl-Umgebung kann in Eclipse eingebunden werden (Parser arbeitet permanent im Hintergrund) und somit z.B. undef. Var erkennen. Diese werden dann entspr. im Code markiert. Beim überfahren mit der Maus erscheinen ggf. Perl-interne Warnung oder Fehler.

              MfG

              • Danny
              1. Woher weiß denn Eclipse das eine Variabel zur Laufzeit undefiniert sein wird?
                Kann es hellsehen?

                Eine lauffähige Perl-Umgebung kann in Eclipse eingebunden werden (Parser arbeitet permanent im Hintergrund) und somit z.B. undef. Var erkennen. Diese werden dann entspr. im Code markiert. Beim überfahren mit der Maus erscheinen ggf. Perl-interne Warnung oder Fehler.

                In der Theorie mag das stimmen, aber ich arbeite z.b. überwiegend an CGI Anwendungen, woher weiß Eclipse dass ein Parameter nicht übergeben wurde?
                Aber auch bei z.b. Tk Anwendungen, woher kann eine Umgebung Wissen dass eine Eingabe agebrochen wurde?

                undefinierte Werte treten ja vor allem bei Nutzereingaben auf.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Verstehe... In diesen Fällen muß man wohl auf altbewährte Debugging, bzw. QS-Mittel zurückgreifen und Testcode schreiben, der versch. Eingaben simuliert.

                  Gruß

                  • Danny
    2. hallo,

      Schreibe die Zeile so:
        print << "XXX";

      Hat leider nichts bewirkt.
      Gruß Poldi

      1. hi,

        Schreibe die Zeile so:
          print << "XXX";
        Hat leider nichts bewirkt.

        Dann mußt du deinen Code mal herzeigen. Tatsächlich kann der Fehler schon deutlich vor dieser Zeile liegen.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. 你好 Poldi,

    Was könnte das bedeuten ?

    Um das beurteilen zu können, brauchen wir mehr Code.

    再见,
     克里斯蒂安

    --
    Das Malheur mit dem Open Source | Frühling
    Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
    http://wwwtech.de/
  3. print <<XXX;

    und zwar mit der Meldung:

    [Fri Jun 16 21:31:45 2006] [error] [client 127.0.0.1] [Fri Jun 16 21:31:45 2006] kontakt.pl: Use of uninitialized value in concatenation (.) or string at C:/apachefriends/xampp/htdocs/cgi-bin/kontakt.pl line 388., referer: http://localhost/tests/testform.htm

    (Die Zeile 388 weist eindeutig auf dieses Statement)

    Du hast irgendwo in deinem XXX Textblock eine Variabel stehen die nicht mit einem Wert belegt wurde.

    also sowas:

    #!/usr/bin/perl -w

    use strict;
    my $string;

    print <<XXX;
    mein: $string
    XXX

    Struppi.

    --
    Javascript ist toll (Perl auch!)