Flunsi: Variabel im String wird nicht interpretiert

moin

ich möchte ein formular, dass ich als form.html abgespeichert habe per cgi ausgeben. dazu lese ich es natürlich erst ein:
<code>
open(datei, "<form.html");
while (<datei>)
   { $html = $html.$_; }
close(datei);
</code>

angenommen der benutzer hat ein feld vergessen auszufüllen, wird das ganze forumular noch mal ausgegeben:
<code>
$username = param('username');
$password = param('password');
print $html;
</code>

mein problem ist nun, dass die variablen $username und $password nicht interpretiert werden.
gibt es da ein trick, oder ein befehl wie zb. eval oder sowas?

Hier ein Auszug aus der Datei:

<tr>
  <td width="50%"><input type="text"     name="username" value="$username"></td>
  <td width="50%"><input type="password" name="password" value="$password"></td>
</tr>

  1. Sup!

    Da wär's ja interessant zu wissen, wie das HTML-Template geladen wird und wie dann die Variable "eingefüllt" wird, vor der Auslieferung an den Client?

    Gruesse,

    Bio

    --
    Eine verwirrende Antwort ist gut, weil sie den Leser zum Nachdenken bringt.
    1. Da wär's ja interessant zu wissen, wie das HTML-Template geladen wird und wie dann die Variable "eingefüllt" wird, vor der Auslieferung an den Client?

      ich dachte das wird ad hoc gemacht, wie folgendes beispiel auch:
      print "Name: $username";

      aber wenn ich den string von einer datei lese, geht das offenbar nicht :(

  2. ich möchte ein formular, dass ich als form.html abgespeichert habe per cgi ausgeben. dazu lese ich es natürlich erst ein:

    Warum?

    Wenn du ein Template verwenden willst, schau dir mal HTML::Template an, ansonsten geht das mit dem CGI Modul wesentlich einfacher und eleganter. Es füllt darüber hinaus automatisch das Formular aus.

    <code>
    open(datei, "<form.html");

    Hier solltest du testen, ob das öffnen geklappt hat:

    open(datei, "<form.html") or die "Kann Datei nicht öffnen, wil: $!";

    while (<datei>)
       { $html = $html.$_; }
    close(datei);

    Das geht einfacher:
    local undef $/;
    $html = <datei>;

    Struppi.

    1. Wenn du ein Template verwenden willst, schau dir mal HTML::Template an.

      danke für den tipp! dieses modul scheint wirklich brauchbar zu sein.
      wie schauts aber mit der performance aus? so viel parserei hat sicher seine kosten!?

      1. Wenn du ein Template verwenden willst, schau dir mal HTML::Template an.

        danke für den tipp! dieses modul scheint wirklich brauchbar zu sein.
        wie schauts aber mit der performance aus? so viel parserei hat sicher seine kosten!?

        Stimmt.

        Du musst dir halt überlegen, was dir wichitger ist. Deine Zeit oder die des Rechners. Wie gesagt, ich persönlich verwende gar keine Templates, da das CGI Modul einen Haufen Funktionen bietet um halbwegs übersichtlich HTML Seiten zu bauen. Gerade die Formularfunktion sind sehr nützlich.

        Evtl. hilft dir auch das weiter http://www.masonhq.com/

        Struppi.