Autor Thema: subs aus main im eigenen Package bekannt geben  (Gelesen 697 mal)

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5758
Antw:subs aus main im eigenen Package bekannt geben
« Antwort #15 am: 24 September 2018, 16:30:17 »
Ok.

Ich denke das Importieren (Überschreiben der Methoden mit *{'DOIF::'.$_} = *{'main::'.$_}) hat sich dann für meinen Zweck erledigt. Denn dann würde
eine Definition vom Anwender z. B. sub {fhem{}} selbst im gekapselten Package alles (auch in main) zunichte machen - das wollte ich eigentlich verhindern.

Dann bleibe ich bei meiner Billiglösung, z. B.:

package DOIF;

sub fhem {
  my ($content)=@_;
  ::fhem($content);
}

So kann der User nur fhem im DOIF zerschießen, wenn er fhem umdefiniert, aber nicht in main.
Programmierte FHEM-Module: DOIF mit uiTable, DOIF-Perl, THRESHOLD, FHEM-Befehl: IF

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5758
Antw:subs aus main im eigenen Package bekannt geben
« Antwort #16 am: 24 September 2018, 16:36:04 »
Interessant wird es dann, wenn jemand aus dem DoIf eine Funktion eines Moduls oder der myutils aufruft. Dann muss er den Namen des Packages voran stellen.


Grüße Sidey

Gesendet von meinem XT1650 mit Tapatalk

Wenn man ohne package arbeitet, dann sind wohl Funktionen in myutils in main, dann muss man logischer Weise im DOIF ::<funktion> angeben.

Wenn man speziell etwas für DOIF definieren möchte, dann kann man davor package DOIF; definieren, dann kann man sie direkte aufrufen.

Das neue Konzept im Perl-Modus sieht aber vor, eigene Perl-Funktionen, die im definierten DOIF-Device genutzt werden,  auch in diesem zu definieren und nicht irgendwo auszulagern.
Programmierte FHEM-Module: DOIF mit uiTable, DOIF-Perl, THRESHOLD, FHEM-Befehl: IF

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4260
    • tech_LogBuch
Antw:subs aus main im eigenen Package bekannt geben
« Antwort #17 am: 24 September 2018, 17:15:09 »
Die Vorgehensweise habe aus deinem Code entnommen:
Auch wenn es nicht mein Code ist (GP_utils nutze ich nur),.. Ich denke wir sprechen an einander vorbei. Mit diesem Code verlinkst du subs aus main in deinem Paket-Raum. Überschreibt man den Link, hat das keine Auswirkung auf main, nur auf dein Paket.
« Letzte Änderung: 24 September 2018, 17:20:21 von hexenmeister »
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5758
Antw:subs aus main im eigenen Package bekannt geben
« Antwort #18 am: 24 September 2018, 17:24:19 »
Auch wenn es nicht mein Code ist (GP_utils nutze ich nur),.. Ich denke wir sprechen an einander vorbei. Mit diesem Code verlinkst du subs aus main in deinem Paket-Raum. Überschreibt man den Link, hat das keine Auswirkung auf main, nur auf dein Paket.

Das dachte ich auch, bis ich es ausprobiert hatte.
Programmierte FHEM-Module: DOIF mit uiTable, DOIF-Perl, THRESHOLD, FHEM-Befehl: IF

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4260
    • tech_LogBuch
Antw:subs aus main im eigenen Package bekannt geben
« Antwort #19 am: 24 September 2018, 21:43:58 »
Das dachte ich auch, bis ich es ausprobiert hatte.
Habe jetzt auch ausprobier. Du hast recht.
Sehr unglücklich >:(

Und macht man aus den subs einen Loop:
sub gettimeofday() {
  return ":P ".main::gettimeofday();
}
Wird man mit "Out of memory!" bestraft ;D
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z