Nur er will nicht die HTML Elemente designen, sondern den HTML Quellcode, also die Einrückungen und die Zeilenumbrüche und aus dem Grund fügt er viele Zeilen in den schon hälichen Quelllcode ;-) mit häßlichen Befehlen ein, die nur die eine Funktion haben, einen evttuell vorhandenen Fehler im Quellcode (also in der ausgabe des Skriptes) leichter zu finden
Häßliche Befehle sind nur $spacer und die eine zugegebenermaßen unglückliche Print-Anweisung. OK, dass mit for ($i...) statt foreach auch, foreach ist mir aber nicht unbekannt ;)
Oh, mir mißfallen auch die sehr verschachtelten Objekte (Hash Referenzen) und die unötigen Dereferenzierungen.
Bring dem CGI-Modul bei eine verschachtelte Liste darzustellen (jetzt mal ganz ohen Einrückungen, also fully unpretty, wie das Modul das eh macht). Kann das Modul wissen, dass wenn ein Listenpunkt eine weitere Liste enthält, dieser Listenpunkt keinen Endtag </li> enthält?
Nein, musst du selber machen. Meinst du in etwa so:
use strict;
use CGI qw(-no_xhtml);
print CGI::header( );
my $liste = [
'a1',
[
'b0',
[ 'c1', 'c2', 'c3'],
'b1',
'b2',
[ 'c1', 'c2', 'c3', ['d0', 'd1', 'd2']],
'b3'
],
'a2',
'a3',
];
print getListe( $liste, 0);
sub getListe {
my $verschachteltes_array = shift;
my $count = shift;
my @liste;
my $last = '';
my $next = '';
foreach( @$verschachteltes_array) {
if( ref $_ eq 'ARRAY') {
# Eine weitere Liste
$next = getListe($_, $count + 1);
} elsif (!$last && !$next) {
# existiert kein vorheriger Wert,
# dann Wert merken
$last = $_;
} else {
push @liste, CGI::li( $last . ( $next || '') );
$last = $_;
$next = '';
}
}
push @liste, CGI::li( $last . ( $next || '') ) if $last;
return CGI::ul( @liste );
}
Ich will keine komplett mittels Perl generierte Seiten haben, wie Rolf es tut, ich will beim SSI bleiben und nur bestimmte Teile der Seiten generieren lassen.
Gibt's ja gar nicht gegen zu sagen, aber das geht auch mit dem CGI Modul prima.
Und dafür, dass ich seit sechs Monaten viel gelernt haben, dank Dir, Alexander und Siechfred, kann man etwas Hässlichkeit im Code verzeichen ;)
Jaja, ich mein das ja gar nicht so.
[1] Ich mag auch Sauberen HTML Code
Genau, und ich z.B. mag nicht, wenn das CGI-Modul <html><head><title> in einer Zeile schreibt, um danach wiederum </head> in einer eigenen Zeile zu schreiben. Etwas mehr Ästhetik in der Ausgabe hätte man sich vom Autor noch wünschen dürfen, oder?
Du kannst natürlich wenn du willst auch nach jeder HTML Ausgabe ein Newline einfügen, aber was hat der Quellcode mit Ästhetik zu tun? Ich guck mir den nur selten an. Ich mein' - du guckst dir ja auch nicht die Sektoren auf der Festplatte an, um zu sehen wie Modul xyz die Daten abspeichert, hauptsache es funktioniert.
Und wie gesagt, wenn du Templates verwendest kannst du den Code gestalten, wie du ihn willst.
Struppi.