Hi Christian,
OK mir war klar dass es nicht leicht zu vermittel ist...
ich will elegant den HTML-Syntaktischen Verscjhachtelungen mit seinen Abschlusstags in Perl Rechnung tragen...
Ich zeig mal wie ichs _nicht_ machen möchte (abgekürzt):
sub table(){
$tabopt=shift;
$code=shift;
print "<table $tabopt>";
eval $code;
print "</table>";
}
#sub tr(){} und sub table(){} analog
sowas wie
table("tabopt","tr('tropt',td('tdopt','text11'));tr(...)");
kann aber kein mensch mehr lesen, händisch umzubrechen und die Einrückungen einzufügen macht auch keinen Spass und mit den "und ' kommt man schnell durcheinander.
Wenn es dir nur um einfach Einrueckungsschemata geht, kannst du auf
einfache Rekursion zurueckgreifen,
wie genau?
Syntaxbaeumen an; aber um das genauer sagen zu koennen musst du etwas
besser erklaeren, was du eigentlich willst :)
Verstanden? ?:)
tschau
rolf
PS: ich hab grad noch so ne Idee für nen Workaround, indem die Funktionen rekursiv ihren eigenen Aufrufstring zurückgeben, der später evaluiert wird.
sub td() {
if (!$execute) {
return "td(@_);";
}else{
print "<td $_[0]> $_[1] </td>"
}
}
analog für die anderen Funktionen, und zuletzt macht man
$execute=0;
$code=table(...);
$execute=1;
eval $code;
aber wenn jmd nen eleganteren Weg weiß bin ich sehr aufgeschlossen. Es muss doch nen Weg geben einen Block an eine
Funktion zur übergeben der nicht sofort evaluiert wird...