string printen der einen string enthält
roman lenz
- perl
hi hi,
ich will meinen html-Code vom perl-Code trennen und habe mir folgendes ausgedacht. Mein html-code steht in einem html-templet. dieses Templt lese ich per Perl ein und ersetze den Konstrukt <!-- $string --> durch $string und printe dann die ganze Zeile an den Browser. In meinem Beisp. zeigt der Browser mir "$welt" an und nicht "Hallo Welt".
In dem String $_ steckt ja noch der String $welt und wird nicht umgesetzt. Ich habe schon was rum probiert aber ich bekomme es nicht hin.
Was muss ich machen damit der zweite String auch umgesetzt wird?
besten Dank und einen schönen Abend noch
bis bis roman
perl:
#!D:\Perl\bin\perl.exe
use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
my $welt="Hallo Welt";
my $cgi = new CGI; # neues Objekt erstellen
print $cgi->header(-type => 'text/html');
open (DAT,'< test_templ.html');
while (<DAT>) {
s/<!-- ([$@&%]{1}.+?) -->/$1/g;
print;
}
html:
<html>
<head>
<title></title>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
</head>
<body>
<!-- $welt -->
<br>
</body>
</html>
P.S. ich hofe es sint kein rechtschreibvehler in meinem posting
Hallo,
ich mach das so:
open(FILE,"$cgipfad/templates/output.html");
foreach $out (<FILE>){
$out =~ s/<%%navilinks%%>/$navigationslinks/g;
$out =~ s/<%%htmlverz%%>/$htmlverz/g;
$ausgabe .= $out;
}
close(FILE);
print $ausgabe;
im Template steht dann an den nötigen Stellen <%%navilinks%%> ...
Cu Helmut
Hi,
vielleicht geht's so:
s/<!-- ([$@&%]{1}.+?) -->/$1/g;
$_ =~ s/<!-- ([$@&%]{1}.+?) -->/$1/g;
print "$_";
Viele Grüße
Torsten
hi roman!
bei mir klappt das:
open(DAT,'<template.htm');
my @lines=<DAT>;
foreach(@lines){
while($_=~/<!-- ([$@&%].+?) -->/){$_=$`.eval($1).$'};
print;
}
close(DAT);
mehr zu regexp:
http://www.perldoc.com/perl5.8.0/pod/perlretut.html#Extracting-matches
prost
seth
#!D:\Perl\bin\perl.exe
use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);my $welt="Hallo Welt";
my $cgi = new CGI; # neues Objekt erstellen
print $cgi->header(-type => 'text/html');
open (DAT,'< test_templ.html');
while (<DAT>) {
s/<!-- ([$@&%]{1}.+?) -->/$1/g;
print;
}html:
<html>
<head>
<title></title>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
</head>
<body>
<!-- $welt -->
<br>
</body>
</html>
und für das alles gibt es ein schönes Modul, das auch funktioniert und nicht die Fehler macht, die du machst und noch machen wirst. Danbene bietet es eine Fülle von Zusätzlichen Funktionen, wie Schleifen.
Schau dir mal die Doku zu HTML::Template an.
oder eine einfache Variante:
my $welt="Hallo Welt";
my $cgi = new CGI; # neues Objekt erstellen
print $cgi->header(-type => 'text/html');
print parse_html_file('test_templ.html',
{
welt => 'Hallo'
}
);
sub parse_html_file
{
my $file = shift;
my $vars = shift || die "Keine Parameter";
open FILE, $file or die "Kann $file nicht öffnen. $!";
local undef $/;
my $file = <FILE>;
close FILE;
my @felder = $file =~ /<!--%([^%]+)%-->/gi;
for(@felder)
{
$_ = uc $_;
$vars->{$_} = "" unless defined $vars->{$_};
}
$file =~ s/<!--%([^%]+)%-->/$vars->{$1}/gi;
return $file;
}
<html><head>
<title></title>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
</head>
<body>
<!--%welt%-->
</body></html>
Struppi.
hi Struppi
ich habe es geahnt :-(( ich wollte eigendlich um diese module herrun kommen (weil ich das mit den hash noch nicht so richtig gerafft habe).
benutzt du HTML::Templet oder HTML::embperl?
wie sind deine erfahrungen mit diesen modulen?
besten dank
bis bis roman
hi Struppi
ich habe es geahnt :-(( ich wollte eigendlich um diese module herrun kommen (weil ich das mit den hash noch nicht so richtig gerafft habe).
Oh, eine der großen Stärken von Perl. Du kannst dir einen Haufen Code ersparen mit dem Sinnvollen Einsatz van hashes.
benutzt du HTML::Templet oder HTML::embperl?
wie sind deine erfahrungen mit diesen modulen?
HTML::Template
Das Modul ist sehr mächtig und vielseitig.
Deshalb benutzte ich für einfache Sachen, wenn es nur darum geht 2 oder 3 Bereiche in die Seite einzubauen, die Funktion (bzw. eine etwas erweiterte Version davon).
Allerdings bin ich von dem Gebrauch von so was prinzipiell etwas abgekommen, da ich, wenn schon dynamische Seiten, dann zu 90% dynamische Seiten mache und in Verbindung mit viel CSS sind Templates dann nicht mehr sinnvoll.
Struppi.