Leser: 23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/perl -T use strict; use warnings; use diagnostics; use CGI::Carp qw(fatalsToBrowser); use CGI qw(:standard); use Fcntl; use lib '/var/www/cgi-bin/newtest'; do "database.pl"; my %html; my $vorlage = "test.tmpl"; $html{'print'} = 'Das ist ein test!'; print &html_ausgeben($vorlage, \%html); exit;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/perl -T use strict; use warnings; use diagnostics; use CGI::Carp qw(fatalsToBrowser); use CGI qw(:standard); use Fcntl; use lib '/var/www/cgi-bin/newtest'; use database; my %html; my $vorlage = "test.tmpl"; $html{'print'} = 'Das ist ein test!'; print &html_ausgeben($vorlage, \%html); exit;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#wird mit DO eingebunden sub html_ausgeben { my $cgi = CGI->new; my ($vorlage, $htmlref) = @_; my @vorlage = &lade_datei($vorlage); my $html = $cgi->header; foreach my $zeile (@vorlage) { $zeile =~ s/<-html_([a-z0-9]+)->/$htmlref->{$1}/gix; $html .= $zeile; } return $html; } sub lade_datei { my $datei = shift; sysopen(VORLAGE, $datei, O_RDONLY) or die("$!"); my @vorlage = <VORLAGE>; close(VORLAGE) or die("$!"); return @vorlage; } 1;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#Wird mit USE eingebunden package database; use strict; use Fcntl; our (@ISA, @EXPORT, $VERSION); use Exporter; $VERSION = 1.00; @ISA = ("Exporter"); @EXPORT = qw(html_ausgeben); sub html_ausgeben { my $cgi = CGI->new; my ($vorlage, $htmlref) = @_; my @vorlage = &lade_datei($vorlage); my $html = $cgi->header; foreach my $zeile (@vorlage) { $zeile =~ s/<-html_([a-z0-9]+)->/$htmlref->{$1}/gix; $html .= $zeile; } return $html; } sub lade_datei { my $datei = shift; sysopen(VORLAGE, $datei, O_RDONLY) or die("$!"); my @vorlage = <VORLAGE>; close(VORLAGE) or die("$!"); return @vorlage; } 1;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use lib '/var/www/cgi-bin/newtest'; use template; my $vorlage = "test.tmpl"; my $data={}; my $cgi = CGI->new(); # ein Templateobjekt erzeugen. # der Vorteil ist, # wenn das Templatesystem komplexer wird, # kann man Problemlos mehrere Instanzen nebeneinander nutzen. my $template=template->new(); # abbruch wenn das template nicht geladen werden konnte die "Error Read Templatefile ($!)" if(!$template->read($vorlage)); $data->{'print'} = 'Das ist ein test!'; # HTTP-Header Ausgeben print $cgi->header(); # Warnungen im Browser ausgeben. # sonst nützt das "use warnings" nicht so viel, # da die Meldungen sonst nur im Errorlog des Webservers landen warningsToBrowser(1); # Das print nicht im templatesystem. # Eventuell sollen die Generierten Daten noch nacharbeitetet werden. # (z.B dienen als Daten für ein weiteres Template) print $template->render($data);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
package template; use strict; use warnings; sub new { my $class=shift; my $self={}; # hier wird das Template gespeichert $self->{template}=''; # wir machen aus dem Paket (Klasse) ein Objekt bless($self,$class); return $self; } sub read { # objekt übernehmen my $self=shift; # dateiname übernehmen my $file=shift; # ganze Datei einlesen # da Inputseparator undef local $/=undef; # Fehler beim öffnen der Datei -> abbruch return 0 if(!open(my $fh, '<', $file)); # man braucht kein sysopen um eine Datei nur lesend zu öffnen # alles einlesen $self->{template}=<$fh>; close($fh); return 1; } sub render { my $self=shift; my $data=shift; # kein Hash -> abbruch return '' if(!ref($data) eq 'HASH'); my $output=$self->{template}; # "\w" findet alle alphanumerischen Zeichen "[A-Za-z0-9]" $output=~ s/<-html_(\w+)->/$data->{lc($1)}/gsx; # gerenderter Text zurück return $output; } 1;
2009-09-02T06:55:29 renee[...]
Wenn Dein Modul für Deinen Anwendungsfall ausreicht, ist das ok. Aber wenn Du dann etwas weitergehst und Schleifen oder If-Bedingungen brauchst, musst Du Deinen Code weiterentwickeln. Dann wird das wesentlich komplexer...
[...]