[Dresden-pm] Frage zum definieren von Makros o.ä.;

A. Pagaltzis pagaltzis at gmx.de
Die Feb 7 02:41:53 PST 2006


* Torsten at x6.develooper.com <Torsten at x6.develooper.com> [2006-02-07 09:15]:
> Kennt jemand von euch eine Möglichkeit langweilige
> Codewiederholungen mit Hilfe von Makros o.ä. zu vermeiden. In C
> machen wir das mit
>
> #define CODE(arg) (boring_code_repetitions)

Selbst in C sind solche »Makros« ja schon kompliziert
handzuhaben, weil sie den Namen garnicht verdienen, sondern
blinde textuelle Substitutionen sind. Daher muss man sie
vorsichtig in schützende Schichten von Klammern setzen.

> Der Code sollte vom Parser vor dem Kompilieren eingefügt
> werden.

In der Perl-Welt nennt sich sowas »source filter«. Leider ist
Perl beliebig kompliziert zu parsen, sodass es soetwas wie
»schützende Klammern« nicht gibt. Es kommt früher oder später zu
subtilen Fehlern, die man kaum zurückverfolgen kann, weil der
Perl-Compiler einen anderen Quelltext zu sehen bekommt als der
Programmier. Filter sind *B*Ö*S*E*.

> Also "evel $code;" wird wohl erst zur Laufzeit kompiliert?

Ja.

> Die im Makro o.ä. definierten Variablen sollten in den
> Geltungsbereich in dem das Makro o.ä. verwendet wird
> überlaufen. Mit "do 'code.pl'; " wird es dann wohl auch nichts?

Nein.

> Den Aufwand eines zusätzlichen Funktionsaufrufs möchte ich
> vermeiden.

In Perl 5 kommst du nicht wirklich drum herum. Allerdings frage
ich mich, warum du das willst. Ist der betreffende Code
tatsächlich zeitkritisch?

> Gibt es in Perl eine Möglichkeit "inline" Funktionen zu
> definieren?

Nein, das kommt erst in Perl 6.

Gruss,
-- 
Aristoteles Pagaltzis // <http://plasmasturm.org/>