Martino: ein SSI-Kommentar mit Perl ersetzen

Hallo, liebe Perl-Hacker,

ich habe eine Reihe shtml-Seiten erstellt, die vor dem Laden also Inhalt aus der Datenbank lesen.
Jetzt drückt der User also einen Link und das Programm wird erneut aufgerufen. Die Inhalte, die der User nun angefordert wird sollen ausserdem an der Stelle stehen, wo vorher der Inhalt vom SSI eingesetzt wurde.
Problem: ich weiss nicht, wie ich den Perl Interpreter dazu bringen kann den SSI-Kommentar zu ersetzen.

So weit bin ich schon:

#! /usr/bin/perl

Template einlesen, Kommentar <!--#include virtual="/cgi-bin/referenzen/referenzen.pl?aktion=alle"--> durch die Ausgabe ersetzen und an den Nutzer senden

$template = "/homepages/11/d68111847/htdocs/architos_content/Referenzen/index.shtml"; #Serverpfad zum html-Template
$platzhalter = '<!--#include virtual="/cgi-bin/referenzen/referenzen.pl?aktion=alle"-->';

open (TEMPLATE, "$template") or die "konnte das Template nicht oeffnen: $!";
@html = <TEMPLATE>;
$html = join ('',@html);
$html =~ s/$platzhalter/$ausgabe/;
print "Content-type:text/html\n\n";
print $html;
close (TEMPLATE);

vielen Dank für Hilfe, Martino

  1. Hallo, liebe Perl-Hacker,

    O je, hoffentlich überlebe ich eine Perl-Thread als nicht-Perlianer... *duck*

    Trotzdem Hallo,

    $platzhalter = '<!--#include virtual="/cgi-bin/referenzen/referenzen.pl?aktion=alle"-->';

    Da diese Variable einen regulären Ausdruck enthalten soll, müssen soweit ich weiß bestimmte Zeichen (Punkt, Fragezeichen in diesem Fall) maskiert werden.

    $html =~ s/$platzhalter/$ausgabe/;

    Wo kommt denn plötzlich $ausgabe her? Ich hab's nirgendwo gesehen...

    Hoffe, das war das Problem...

    Grüße,

    Christian

    --
    Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                          -- Albert Einstein
    1. Hallo Christian,

      die Ausgabe wird aus dem Mutterskript herübergeschickt, das funtionniert. Mit dem Maskieren hast du völlig recht, nur leider funktionierte das nicht.
      Weder
      $platzhalter = "<!--#include virtual="/cgi-bin/referenzen/referenzen.pl?aktion=alle"-->";
      noch sonst eine Variante führen zur Ersetzung. Kämen nur doppelte Anführungszeichen zum Einsatz, ginge das sicher, aber das Gatterzeichen wird offenbar als Kommentar gewertet, jedenfalls findet keine Ersetzung statt.

      noch eine Idee? Danke, Martino

      1. Hallo Martino,

        $platzhalter = "<!--#include virtual="/cgi-bin/referenzen/referenzen.pl?aktion=alle"-->";

        $platzhalter = "<!--#include virtual="/cgi-bin/referenzen/referenzen.pl?aktion=alle"-->";
                                                                              ^   ^

        es ging mir um diese beiden Zeichen. (haben in regulären Ausdrücken besondere Bedeutungen, daher müssen sie maskiert werden) :)

        Eventuell musst Du auch noch alle / maskieren, aber das dürfte nicht der Fall sein, kann aber zuwenig Perl, um es Dir jetzt genau zu sagen...

        aber das Gatterzeichen wird offenbar als Kommentar gewertet

        In Zeichenketten darf das eigentlich nicht passieren... Denn wenn # als Kommentar gewertet wird, dann müsstest Du einen saftigen Parse-Error bekommen...

        Grüße,

        Christian

        --
        Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                              -- Albert Einstein