Patric: leeren String vergleichen

Hallo,

Kann mir jemand sagen, wie ich in Perl eine Stringvariable mit einem leeren String vergleiche? So vielleicht:

if($ort ne "")
{ ... }

Danke.

  1. Hi,

    Kann mir jemand sagen, wie ich in Perl eine Stringvariable mit einem leeren String vergleiche? So vielleicht:

    if($ort ne "")

    ja. Was klappt daran nicht? Liegt es vielleicht daran, daß $ort gar nicht leer ist, sondern z.B. einen Umbruch enthält? (=> perldoc -f chomp)

    Cheatah

    1. ja. Was klappt daran nicht?

      Ich übergebe aus einem Formular den Inhalt eines einzeiligen Textfeldes. Die Function ReadParse() (nicht von mir) erstellt die Hash-Liste $in. Möchte nun die Einträge auf Inhalt überprüfen. Mache dies mit der Anweisung:

      if ($in{'ort'} ne "")
      { WIRD AUCH ERREICHT, WENN FELD IM FORMULAR LEER IST}
      else { $ort=""; }

      Wenn ich mir den Inhalt des Feldes anzeigen lasse mit:

      print "Ort: "$in{'ort'}"";

      so erhalte ich auf der HTML-Seite den Text: Ort: ""

      Bin Anfänger, und weiß nicht was es sein könnte. Falls erforderlich, so kann ich die Funktion read-parse zuschicken, oder auch hier eintragen.

      Danke.

      1. Hallo,

        if ($in{'ort'} ne "")
        { WIRD AUCH ERREICHT, WENN FELD IM FORMULAR LEER IST}
        else { $ort=""; }

        Wenn ich mir den Inhalt des Feldes anzeigen lasse mit:

        print "Ort: "$in{'ort'}"";

        so erhalte ich auf der HTML-Seite den Text: Ort: ""

        Wies aussieht, verwendest Du die cgi-lib.pl, ok, hast Du die richtig eingebunden?

        require "cgi-lib.pl";
        ReadParse(); # liest die Felder auf %in
        $ort = $in{'ort'}; # ist der Name des Eingabefeldes auch 'ort' ?

        if , else dann so:

        if ( $in{'ort'} ){

        wenn in Feld 'ort' was eingeben wurde ...

        }else

        wenn in Feld 'ort' nix eingebet wurde ...

        }

        Tipp: nimm mal zur Probe die cgi-lib Funktion "print PrintVariables()", damit kannst Du alle Eingaben ersteinmal prüfen. Mehr zur cgi-lib.pl auf meiner HP und dort auch ein Ausblick zum Modul CGI.PM (resp. eines von Oreilly.de gespiegelten Manuals zu diesem Modul).
        http://www.i-netlab.de/cgilib/cgilib.htm resp. http://www.i-netlab.de/cgipm/cgi.htm

        Viele Grüße, Rolf

      2. Hi,

        Die Function ReadParse() (nicht von mir) erstellt die Hash-Liste $in.

        das ist eine ziemlich veraltete Methode. Benutze lieber für solche Dinge das bewährte Modul CGI.pm:

        #!/usr/bin/perl -w
        use strict;
        use CGI ':standard';

        print header, start_html('Test');
        if (param('ort')) { print h1('Ort: '+param('ort')); }
        else { print h1('Kein Ort eingegeben.'); }
        print end_html;

        Bin Anfänger, und weiß nicht

        ...was am Modul CGI.pm noch alles dranhängt. Ist nicht weiter tragisch, fang ruhig langsam an - aber stöber mal ein wenig in perldoc CGI rum :-)

        Cheatah

  2. Das Problem weitet sich aus. Verstehe mittlerweile gar nichts mehr. Wenn das Formular im Browser angezeigt wird, gebe ich zum Beispiel den Ort ein. Beim submit wird das Perl-Sript ausgeführt. Dieses liest eine Datenbank aus, und generiert eine neue HTML-Seite, welche dann angezeigt wird. Wenn ich über den Back-Button (im Browser) auf das Formular zurückblättere, so wird dieses mitsamt Eingabe (Ort) angezeigt (das ist noch okay). Falls ich nun den Ort herauslösche und z.B. in ein anderes Feld eine PLZ eingebe, so bleibt der Wert der Variable Ort seltsamerweise erhalten. Anderes Beispiel: Ich lösche den ersten Ort aus dem Feld und gebe einen anderen ein. Die Variable im Perl-Script, welche den Ort aufnimmt, enthält die beiden Orte hintereinandergehängt. Ich dachte, nachdem das Perls-Script abgearbeitet wurde, werden sämtliche Variablen freigegeben. Offensichtlich scheint das nicht der Fall zu sein. Was kann das sein? Wie kann ich das abstellen?

    Besten Dank.