Jörg: altes Datumproblem mit neuer Variante ??

Hallo
hier ist ein Auschnitt aus meinem Perl Script.
.
.
$jahr=param('jahr');
$monat=param('monat');
$bericht=param('bericht');

$filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/$bericht.htm";
.
.

nun möchte ich wissen warum dies nicht geht. kann ich nicht einfach die Werte übernehmen um in ein Unterverzeichniss zu gelangen?

Jörg

  1. Hallo Jörg,

    die Variablen verwenden, daß geht schon. Nur darfst Du sie dann halt nicht innerhalb des Strings zu stehen haben, sonst interpretiert sie Perl zu dem String dazugehörend und nicht als Variable.
    Statt

    $filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/$bericht.htm";

    solltest Du also
    $filehtm = "/home/bswfr/daten/datenbab1bsw/"+$jahr+"/"+$monat+"/"+$bericht.htm;
    oder sowas in der Art verwenden. Leider kann ich mich mit Perl nicht aus, und weiß daher nicht, wie man String verknüft. Statt dem Pluszeichen könnte es also auch was anderes sein.

    Gruß
      Michael

    1. Hallo Michael und Jörg

      $filehtm = "/home/bswfr/daten/datenbab1bsw/"+$jahr+"/"+$monat+"/"+$bericht.htm;
      oder sowas in der Art verwenden. Leider kann ich mich mit Perl nicht aus, und weiß daher nicht, wie man String verknüft. Statt dem Pluszeichen könnte es also auch was anderes sein.

      Der Operator zu Stringverknüpfung ist ".":
         $filehtm = "/home/bswfr/daten/datenbab1bsw/".$jahr."/".$monat."/".$bericht.".htm";

      Wobei Perl müsste die Zuweisung von Jörg korrekt ausführen, da Variablen in Strings mit doppelten Anführeungszeichen auswertet (interpoliert) werden.

      $filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/$bericht.htm";

      Möglicherweise klappt die Übergabe der Parameter aus dem Formular nicht (Gross/Kleinschreibung der Feldnamen, leere Felder etc.).
      Es wäre interessant zu erfahren, was im Skalar $filehtm drinsteht. Wen Du, Jörg, in Dein Skript ein
        print $filehtm;
      einfügen könntest und das Ergebnis hier postest. Dann wüssten wir vielleicht mehr und könnten weiter helfen ;-)

      Grüsse
      Tom

      1. Hallochen,

        $filehtm = "/home/bswfr/daten/datenbab1bsw/"+$jahr+"/"+$monat+"/"+$bericht.htm;

        ...

        Der Operator zu Stringverknüpfung ist ".":
           $filehtm = "/home/bswfr/daten/datenbab1bsw/".$jahr."/".$monat."/".$bericht.".htm";

        Wobei Perl müsste die Zuweisung von Jörg korrekt ausführen, da Variablen in Strings mit doppelten Anführeungszeichen auswertet (interpoliert) werden.

        $filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/$bericht.htm";

        Meiner Meinung nach ist der letzte Ausdruck etwas wackelig. in "" wird der . als beliebiges Zeichen interpretiert. Also entweder so wie es Tom vorschlägt, oder als Mischform

        $filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/".$bericht.".htm";

        müsste auch gehen.
        Der Hinweis von Tom mit dem print ist gut! Das ist das Erste was ich in einem solchen Fall mache.

        Chiau Pit

        1. Hallo Pit

          Meiner Meinung nach ist der letzte Ausdruck etwas wackelig. in "" wird der . als beliebiges Zeichen interpretiert. Also entweder so wie es Tom vorschlägt, oder als Mischform

          $filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/".$bericht.".htm";

          Der Punkt im String hat keine Auswirkung, das habe ich sicherheitshalber getestet.
          Der Punkt hat nur in RegExp die von Dir geschilderte Wirkung, wobei wir in diesem Fall ein zu interpolierenden String vorliegen haben. Dabei werden offensichtlich nur Variablen ausgewertet und eingesetzt.

          Grüsse
          Tom

          1. $filehtm = "/home/bswfr/daten/datenbab1bsw/$jahr/$monat/".$bericht.".htm";
            Der Punkt hat nur in RegExp die von Dir geschilderte Wirkung, wobei wir in diesem Fall ein zu interpolierenden String vorliegen haben. Dabei werden offensichtlich nur Variablen ausgewertet und eingesetzt.

            Eben. Dein Problem liegt bestimmt nicht an der String-Auswertung, denn die Ersetzung der Variablen muß auch ohne concat funktionieren (wegen "").

            Was passiert denn überhaupt? "Funktioniert nicht" ist zu wenig Information, da kann nur Kaffeesatz als Reaktion kommen.
            Es gäbe genügend Fehlermöglichkeiten - beispielsweise könnte der generierte Dateiname auf Deiner Plattform einfach illegal sein ...