ein SSI-Kommentar mit Perl ersetzen
Martino
- cgi
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 = "/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
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
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
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