[gelöst] sub innerhalb eines Funktionsaufrufes

Begonnen von CoolTux, 08 November 2018, 14:59:47

Vorheriges Thema - Nächstes Thema

CoolTux


CommandAttr( undef, $name . ' ASC_twilightDevice ' . sub { my @test = devspec2array('TYPE=(Astro|Twilight)'); return $test[0]; } );


Das gibt mir natürlich eine Referenz als Attributwert.
Eigentlich möchte ich nur erreichen das wenn devspec2array mir wie ein Eintrag hat er mir doch bitte nur den ersten als Attributwert schreibt. Da bin ich dann auf die Idee mit der sub gekommen.
Jemand eine bessere Idee oder wenn mit sub wie ich das korrekt machen muss damit auch der return Wert raus kommt.

Ich weiß das wenn

my $subwert = sub { my @test = devspec2array('TYPE=(Astro|Twilight)'); return $test[0]; };
$subwert = \$subwert;

geht. Aber ich wollte es eigentlich so schön innerhalb der CommandAttr Funktion als Parameterübergabe einbeten.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Hi,
versuch mal, "sub" und "return" wegzulassen, also so:

CommandAttr( undef, $name . ' ASC_twilightDevice ' . { my @test = devspec2array('TYPE=(Astro|Twilight)'); $test[0]; } );

Ich hab das jetzt nicht komplett ausprobiert, aber ich sehe da eine Chance...
Gruß,
   Thorsten
FUIP

CoolTux

Leider nicht. Fetter Syntaxerror. Aber Danke fürs Nachdenken.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Hi,
ich denke, dass Du die sub auch aufrufen musst, wenn Du es mit sub machst:

{ "hello". sub { my @test = ("1"," world","3");; $test[1] }->() }

Das ergibt im FHEM-Kommandofeld "hello world".
...also das könnte bei Dir gehen:

CommandAttr( undef, $name . ' ASC_twilightDevice ' . sub { my @test = devspec2array('TYPE=(Astro|Twilight)'); return $test[0]; }->() );

Gruß,
   Thorsten
FUIP

CoolTux

Hallo Thorsten,

Du bist Gold wert. Das könnte es sein. Bin leider gerade unterwegs. Aber genau das mit dem Referenzaufruf habe ich gesucht. Ähnliche Aufrufe habe ich bei den perlmonks gefunden aber halt nicht genau so. Ich berichte heute Abend.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Was soll ich sagen. Konnte es nicht abwarten und habe es eben mal getestet. Geht astrein. Vielen lieben Dank Thorsten.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Hi,
Deine netten Worte haben mich angespornt, das noch etwas eleganter hinzuschreiben:

CommandAttr( undef, $name . ' ASC_twilightDevice ' . (devspec2array('TYPE=(Astro|Twilight)'))[0] );

...es geht ja nur darum, den Interpreter in den Array-Kontext zu zwingen.
Gruß,
    Thorsten
FUIP

CoolTux

Oh man jetzt mal ehrlich, darauf hätte ich echt auch kommen können, zumal ich das so schon an anderen Stellen in meinen Modulen mache.
War zu einfach, aber mir geht es auch um den Lerneffekt. Und das mit den anonymen Subs wollte ich schon immer mal testen.
Für die jetzige Aufgabe nehme ich natürlich das einfache.

Vielen lieben Dank noch mal.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Zitat von: CoolTux am 08 November 2018, 16:43:55aber mir geht es auch um den Lerneffekt.
So ging's mir auch. Deshalb habe ich mir auch zuerst das mit der sub überlegt. War eine nette kleine Knobelei...
Gruß,
   Thorsten
FUIP