Autor Thema: [gelöst] sub innerhalb eines Funktionsaufrufes  (Gelesen 272 mal)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16799
[gelöst] sub innerhalb eines Funktionsaufrufes
« am: 08 November 2018, 14:59:47 »
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
« Letzte Änderung: 08 November 2018, 16:05:03 von CoolTux »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4902
  • Finger weg von der fhem.cfg
Antw:sub innerhalb eines Funktionsaufrufes
« Antwort #1 am: 08 November 2018, 15:11:14 »
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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16799
Antw:sub innerhalb eines Funktionsaufrufes
« Antwort #2 am: 08 November 2018, 15:22:19 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4902
  • Finger weg von der fhem.cfg
Antw:sub innerhalb eines Funktionsaufrufes
« Antwort #3 am: 08 November 2018, 15:31:59 »
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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16799
Antw:sub innerhalb eines Funktionsaufrufes
« Antwort #4 am: 08 November 2018, 15:37:20 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16799
Antw:sub innerhalb eines Funktionsaufrufes
« Antwort #5 am: 08 November 2018, 16:04:32 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4902
  • Finger weg von der fhem.cfg
Antw:[gelöst] sub innerhalb eines Funktionsaufrufes
« Antwort #6 am: 08 November 2018, 16:23:55 »
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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16799
Antw:[gelöst] sub innerhalb eines Funktionsaufrufes
« Antwort #7 am: 08 November 2018, 16:43:55 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4902
  • Finger weg von der fhem.cfg
Antw:[gelöst] sub innerhalb eines Funktionsaufrufes
« Antwort #8 am: 08 November 2018, 18:01:37 »
aber 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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)
Gefällt mir Gefällt mir x 1 Liste anzeigen