use Mosche;
Den Tip mit CGI hast du bereits bekommen, vielleicht hier einige Verbesserungen:
Gerade wenn du sehr viele Template-Parameter hast, wird dein Quellcode sehr unübersichtlich. Verwende dann besser einen Hash.
Lasse alle Parameter, die du bekommst (also zB /cgi-bin/dein_cgi.pl?alias=blah) mit einem fest definierten Wert beginnen:
/cgi-bin/dein_cgi.pl?t_alias=blah&t_name=daniel&...
Dann füllst du einen Hash mit deinen Template-Parametern:
my $prefix = 't_'; # der Prefix, den du deinen Parametern gibst (um sie von nicht Template-Parametern zu unterscheiden.
my %hash = map { ($_ =~ /^$prefix/) ? (substr($_, length($prefix)), param($_)) : ()} param();
Das sieht ziemlich kompliziert aus, deswegen erkläre ich es hier ausführlich:
Die Funktion map ist etwas ähnliches wie eine for-Schleife, nur das sie eine Liste als Parameter erhält und auch eine zurückgibt. Der Code sieht in der Langform so aus
my $prefix = 't_';
my %hash;
foreach (param()) {
diese Schleife läuft über alle Parameternamen,
die dein Script bekommt
if (/^$prefix/){
# das if prüft hier, ob der aktuelle Parametername
# wirklich mit deinem Prefix beginnt (und damit zu
# deinen Template-Variablen gehört)
# jetzt schneiden wir das Prefix ab
my $name = substr($_, length(%prefix));
# und jetzt fügen wir den Template- Parameter mit
# Wert in den Hash ein
$hash{$name} = param($_);
}
}
Wenn du das hast, kannst du deine Template-ersetzung vereinfachen:
open FILE,"<t_artikel.htm" or die "artikel.htm: $!";
print header();
Ich sehe, dass du bereits das CGI-Modul benutzt, deswegen vergiss nicht, auch die Funktion param() zu importieren (ist bereits getan, wenn du das Symbol ':standard' importierst.
Wenn du sowieso alle Zeilen gleich danach ausgibst, spar dir den Umweg, die Datei zeilenweise einzulesen:
$/ = undef;
my $file = <FH>;
$file =~ s/[(.*?)]/$hash{$1}/g;
print $file;
Dann brauchst du die Schleife nicht mehr.
close FILE;
Wenn du Standard-werte setzen willst, solltest du diese vor dem Auslesen der Parameter in den Hash einfügen.
Hier nochmals die komplette Datei (ausgetestet):
########################
#!/usr/bin/perl -w
use strict;
use CGI qw(param header);
print header();
my $tmpl_prefix = 't_';
my $tmpl_file = '/web/test/htdocs/template.html';
my %tmpl_values = map { ($_ =~ /^$tmpl_prefix/) ? (substr($_, length($tmpl_prefix)), param($_)) : ()} param();
$/ = undef;
open(FH, $tmpl_file) or die "Kann $tmpl_file nicht öffnen: $!";
Datei einlesen
my $file = <FH>;
Template-Parameter ersetzen
$file =~ s/[(.*?)]/$tmpl_values{$1}/g;
Datei ausgeben
print $file;
close(FH);
###########################
Ich hoffe, du kannst damit etwas anfangen...
use Tschoe qw(Matti);