[Gelöst] Wie kann man Variablen zusammensetzen?

Begonnen von mi.ke, 17 Februar 2018, 14:31:47

Vorheriges Thema - Nächstes Thema

Christoph Morrison

Zitat von: Otto123 am 26 Oktober 2020, 23:00:33
Ihr müsst meine Anmerkung nicht ernst nehmen, aber sie ist gut gemeint ;)

Wenn etwas funktioniert obwohl es nicht in der Doku steht, kann es sich auch um einen Fehler handeln.
Bei Softwareentwicklung gilt: Es besteht kein Rechtsanspruch auf die Beibehaltung von Fehlern.

Ich sehe nicht, wieso das eine Sache des FHEM-Interpreters sein sollte. Der "Fehler" (das Warning) entstand ja durch eine Änderung am Perl-Interpreter in Vorgriff auf 5.30, nicht am Parsing von devspec2array.

Zitat von: Otto123 am 26 Oktober 2020, 23:00:33
Es existiert eine einfache und dokumentierte Lösung. Also warum das Pferd rückwärts reiten?

Es gibt mehr als einen Weg ein Pferd zu reiten ;-)
Aber ja, deinen Weg wäre ich auch gegangen.

Otto123

Naja, das mit dem Warning verstehe ich auch noch nicht: ein Warning verhindert normal nicht die Ausführung.
Aber es gibt die Fehlermeldung (Please define GA_${NAME} first) die verhindert dann die Ausführung. Sagt aber eigentlich, das FHEM mit GA_${NAME} nix anfangen kann?
In der Doku steht man kann $NAME verwenden, dass man auch ${NAME} verwenden kann steht da nicht. Kann sein ich bin ein Erbsenzähler :)
Aber manche Sachen baut Rudi ja auch bewusst ein und dokumentiert sie erstmal nicht ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

uelpenich

ZitatSchätze mal uelpenich hat nicht die letzte Version der fhem.pl.
Nach einem fhem update ist die Warnung einige Zeilen höher gewandert:
2020.10.26 23:22:43 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/^(GA_${ <-- HERE NAME})$/ at fhem.pl line 1323.
2020.10.26 23:22:43 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:44 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:44 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:45 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:47 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:48 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:49 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:50 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:51 3: EG_HKV_GA return value: Please define GA_${NAME} first
2020.10.26 23:22:52 3: EG_HKV_GA return value: Please define GA_${NAME} first


ZitatWenn etwas funktioniert obwohl es nicht in der Doku steht, kann es sich auch um einen Fehler handeln.
Ich mag auch keine "undocumented features".
ZitatEs existiert eine einfache und dokumentierte Lösung.
Es tut mir leid, in diesem Thread habe ich die einfache und dokumentierte Lösung nicht gesehen.
ZitatAlso warum das Pferd rückwärts reiten?
Mir ist nicht aufgefallen, dass ich verkehrt auf dem Pferd sitze.

ZitatIn der Doku steht man kann $NAME verwenden, dass man auch ${NAME} verwenden kann steht da nicht. Kann sein ich bin ein Erbsenzähler
Noch einmal zurück auf meine ursprüngliche Fragestellung.
Es geht um zwei Fälle: wasvornedran_$NAME und $NAME_etwashintendran
wasvornedran_$NAME funktioniert.
$NAME_etwashintendran kann nicht funktionieren, da Perl nicht wissen kann, wo der Variablenname aufhört und _etwashintendran anfängt. Der Lösungsvorschlag ist die Klammerung ${NAME}_etwashintendran
Zitat$NAME_etwashintendran muss ${NAME}_etwashintendran heißen, dann klappt's auch mit dem Appendix.
Ich habe nie ausprobiert, ob ${NAME}_etwashintendran funktioniert.

Aus ${NAME}_etwashintendran habe ich geschlossen, dass auch wasvornedran_${NAME} funktionieren sollte. Liege ich falsch mit meiner Folgerung? Ist Perl so unübersichtlich, dass nur ${NAME}_etwashintendran und wasvornedran_$NAME funktionieren?

Otto123

ZitatEs tut mir leid, in diesem Thread habe ich die einfache und dokumentierte Lösung nicht gesehen.
mein Vorschlag stand in #26
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz