Avanti

Thomas Berger ThB at gymel.com
Do Aug 16 15:49:17 CEST 2001


Liebe Frau Koczian,

> >Was Kollege Fischer da beobachtet, ist eine Folge der Angleichung
> >von avanti und FLEX. Weil ja nun fast jeder Buchstabe eine
> >Sondervariable ist (obwohl bei avanti noch ein paar weniger),
> >muessen Textelemente immer in "..." eingeschlossen werden.
> >Auch bisher musste man da durchaus aufpassen, so dass wir
> >annehmen, dass in funktionierenden
> >Skripten normalerweise die "..." gesetzt sind. Wo nicht, muss das
> >nun nachgebessert werden.
> 
> Das heisst, auch wenn man die Namen mehrerer Sondervariabler unmittelbar
> hintereinander schreibt, ohne irgendeinen Trenner, werden sie als
> Sondervariable interpretiert? Ich hoffe dringend, dass trennende
> Leerzeichen (ohne ".." drumherum) weiterhin nicht in der Ausgabe landen;

Ich glaube, es liegt hier ein Missverstaendnis vor.
Herr Fischer hatte wohl Konstruktionen wie

write Hallo newline

benutzt. Aber newline ist immer newline und nicht
n e w l i n e  (also 7 Abkuerzungen fuer Sondervariable)
Spatien bleiben also wichtig, um Sondervariable
voneinander zu trennen, *Text* hingegen sollte immer
ein (einfache oder doppelten) Anfuehrugnszeichen stehen.


> und mir scheint so was doch ueblichen Programmiersprachen-Gepflogenheiten
> zu widersprechen, oder irre ich mich? Vergleichbar waeren wohl am ehesten
> die tausend unbehaltbaren Sondervariablen von Perl, kann man die ohne Punkt
> und Komma aneinanderketten?

Nein, das ist nicht vergleichbar: Perl-Variable werden
*innerhalb* von (double quoted) Strings expandiert, das
funktioniert, weil ja ein $ davorsteht.

Es funktioniert weder

print $a $b $c;
noch
print $a$b$c;

Wohl aber funktioniert:

print "$a $b $c";
print "$a$b$c";
# Beides ist *ein* String mit Expansion, Spatien
# machen Unterschied.

und 

print $a, $b, $c;   # Ausgabe einer dreielementigen Liste
# Komma ist Listentrennzeichen, Spatien machen keinen Unterschied
# zwischen die Listenelemente wird $, ($OFS) automatisch
# eingefuegt

und

print $a . $b . $c   # Ausgabe eines aus drei Teilstrings
# zusammengesetzten Strings, Spatien machen keinen Unterschied

und 

map { print } $a, $b, $c;   # dreimalige Ausgabe je eines
# Teilstrings

und natuerlich noch eine Zillion abgefahrenere Moeglichkeiten,
wie etwa

print "@{[$a, $b, $c]}";  # Ausgabe eines adhoc-Arrays,
# Spatien egal, zwischen die Elemente wird $" automatisch
# eingefuegt

viele Gruesse
Thomas Berger




Mehr Informationen über die Mailingliste Allegro