Struppi: string printen der einen string enthält

Beitrag lesen

#!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.