subs aus main im eigenen Package bekannt geben

Begonnen von Damian, 24 September 2018, 07:54:22

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Damian am 24 September 2018, 15:12:13
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-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Sidey am 24 September 2018, 15:37:35
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-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hexenmeister

#17
Zitat von: Damian am 24 September 2018, 16:26:34
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.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Damian

Zitat von: hexenmeister am 24 September 2018, 17:15:09
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-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hexenmeister

Zitat von: Damian am 24 September 2018, 17:24:19
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
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy